记录编号 297211 评测结果 AAAAAAAAAA
题目名称 魔法传输 最终得分 100
用户昵称 Gravatar521 是否通过 通过
代码语言 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(){;}