记录编号 |
297211 |
评测结果 |
AAAAAAAAAA |
题目名称 |
魔法传输 |
最终得分 |
100 |
用户昵称 |
521 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.347 s |
提交时间 |
2016-08-16 15:40:41 |
内存使用 |
1.34 MiB |
显示代码纯文本
#include<stdio.h>
#define Mod 1000000007
#define M 100010
inline void read(int&x)
{
char ch;
bool b=0;
while(ch=getchar(),ch<'0'||ch>'9') if(ch=='-') b=1;
x=(ch^'0');
while(ch=getchar(),ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^'0');
if(b) x=-x;
}
//===============================================================
int tree[M<<2]={0},cnt[M<<2];
inline void pushdown(int rt,int x)
{
if(!cnt[rt]) return ;
int ls=rt<<1,rs=rt<<1|1,lm=x-(x>>1),rm=x>>1;
cnt[ls]+=cnt[rt],cnt[rs]+=cnt[rt];
tree[ls]+=(tree[rt]-rm*cnt[rt])%Mod;
tree[rs]+=tree[rt];
cnt[rt]=tree[rt]=0;
}
inline void update(int L,int R,int l,int r,int rt)
{
if(L>R||l>r) return ;
if(l>=L&&r<=R){
tree[rt]+=(r-L+1);
tree[rt]%=Mod;
cnt[rt]++;
return ;
}
pushdown(rt,r-l+1);
int mid=l+r>>1;
if(mid>=L) update(L,R,l,mid,rt<<1);
if(mid<R) update(L,R,mid+1,r,rt<<1|1);
//tree[rt]=tree[rt<<1|1];
}
inline void query(int p,int l,int r,int rt)
{
if(l>r) return ;
if(l==r){
printf("%d\n",tree[rt]);
return ;
}
pushdown(rt,r-l+1);
int mid=l+r>>1;
if(mid>=p) query(p,l,mid,rt<<1);
else query(p,mid+1,r,rt<<1|1);
}
int _521()
{
#define STRAT
#ifdef STRAT
freopen("magics.in","r",stdin);
freopen("magics.out","w",stdout);
#else
freopen("1.in","r",stdin);
#endif
int n,m,i,a,b;
read(n),read(m);
for(i=1;i<=m;i++){
char ch;
scanf("\n%c",&ch);
if(ch=='C'){
read(a),read(b);
update(a,b,1,n,1);
}
else read(a),query(a,1,n,1);
}
return 0;
}
int _520=_521();
int main(){;}