记录编号 601018 评测结果 AAAAAAAAAA
题目名称 2264.魔法传输 最终得分 100
用户昵称 Gravatar秋_Water 是否通过 通过
代码语言 C++ 运行时间 0.994 s
提交时间 2025-05-24 15:31:12 内存使用 4.46 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
const int mod=1000000007;
struct{
    int ls,rs;
    int sum,add;
}t[2*N];
int root,cnt,a[N],n,m;
void addtag(int p,int l,int r,int val){
    t[p].sum=(t[p].sum+(r-l+1)*val)%mod;
    t[p].add+=val;
}
void pushdown(int p,int l,int r){
    int mid=l+r>>1;
    if(t[p].add!=0){
        addtag(t[p].ls,l,mid,t[p].add);
        addtag(t[p].rs,mid+1,r,t[p].add);
        t[p].add=0;        
    }    
}
void build(int &p,int l,int r){
    p=++cnt;
    if(l==r){
        t[p].sum=a[l];
        return;
    }
    int mid=l+r>>1;
    build(t[p].ls,l,mid);
    build(t[p].rs,mid+1,r);
    t[p].sum=t[t[p].ls].sum+t[t[p].rs].sum;
}
void modif(int p,int pl,int pr,int l,int r,int k){
    if(pl>r||pr<l){
        return;
    }
    if(pl<=l&&r<=pr){
        addtag(p,l,r,k);
        return;
    }
    pushdown(p,l,r);
    int mid=l+r>>1;
    modif(t[p].ls,pl,pr,l,mid,k);
    modif(t[p].rs,pl,pr,mid+1,r,k);
    t[p].sum=(t[t[p].ls].sum+t[t[p].rs].sum)%mod; 
}
int query(int p,int pl,int pr,int l,int r){
    if (pl>r||pr<l) return 0;    
    if(pl<=l&&r<=pr){
        return t[p].sum;
    }
    pushdown(p,l,r);
    int mid=l+r>>1;
    return (query(t[p].ls,pl,pr,l,mid)+query(t[p].rs,pl,pr,mid+1,r))%mod;
}
int main(){
    freopen("magics.in","r",stdin);
    freopen("magics.out","w",stdout);
    cin>>n>>m;
    build(root,1,n);
    for(int i=1;i<=m;i++){
        char ch;
        int l,r,x;
        cin>>ch;
        if(ch=='C'){
            cin>>l>>r;
            modif(root,l,r,1,n,1);
            modif(root,r+1,r+1,1,n,-(r-l+1));
        }
        else{
            cin>>x;
            cout<<query(root,1,x,1,n)<<"\n";
        }
    }
    
    return 0;
}