记录编号 315855 评测结果 AAAAAAAAAA
题目名称 2264.魔法传输 最终得分 100
用户昵称 sxysxy 是否通过 通过
代码语言 C++ 运行时间 0.322 s
提交时间 2016-10-05 21:59:38 内存使用 1.44 MiB
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define MAXN 100002
#define MOD 1000000007
int magic;
int lazy[MAXN];
int d[MAXN];
int moni[MAXN];

void add(int l, int r)
{
    int k = 1;
    for(int i = l; i <= r;)
    {
        if(i % magic == 0 && i + magic <= r)
        {
            lazy[i/magic] += k;
            d[i/magic]++;
            k += magic;
            i += magic;
        }else
        {
            moni[i] += (k++);
            i++;
        }
    }
}
int query(int p)
{
    int m = p/magic;
    return (lazy[m]%MOD + (p-m*magic)*d[m]%MOD + moni[p]%MOD) % MOD;
}

int main()
{
    freopen("magics.in", "r", stdin);
    freopen("magics.out", "w", stdout);
    int n, m;
    scanf("%d %d", &n, &m);
    magic = (int)sqrt(n);
    
    while(m--)
    {
        char c;
        while(c = getchar())if(isalpha(c))break;
        if(c == 'C')
        {
            int a, b;
            scanf("%d %d", &a, &b);
            add(a, b);
        }else
        {
            int x;
            scanf("%d", &x);
            printf("%d\n", query(x));
        }
    }
    return 0;
}