记录编号 |
601018 |
评测结果 |
AAAAAAAAAA |
题目名称 |
2264.魔法传输 |
最终得分 |
100 |
用户昵称 |
秋_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;
}