记录编号 372757 评测结果 AAAAAAAAAA
题目名称 数列操作C 最终得分 100
用户昵称 Gravatar哒哒哒哒哒! 是否通过 通过
代码语言 C++ 运行时间 0.346 s
提交时间 2017-02-19 06:23:58 内存使用 1.08 MiB
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
#define ll long long 
ll read(){
	ll x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
	return x*f;
}
const ll maxn=101000;
ll c[maxn];
struct Node{
	ll w,sum,lazy,sz;
	Node *ch[2],*f;
	Node(ll w=0,Node *f=0)
		:w(w),f(f){ch[0]=ch[1]=0;lazy=0;sum=w;sz=1;}
	bool rc(){if(f)return f->ch[1]==this;}
	void add(ll x){sum+=sz*x,lazy+=x,w+=x;}
	void down(){
		if(!lazy) return;
		if(ch[0]) ch[0]->add(lazy);
		if(ch[1]) ch[1]->add(lazy);
		lazy=0;
	}
	void up(){
		sz=1,sum=w;
		if(ch[0]) sz+=ch[0]->sz,sum+=ch[0]->sum;
		if(ch[1]) sz+=ch[1]->sz,sum+=ch[1]->sum;
	}
}*s;
void link(Node *x,Node *y,ll c){
	if(x) x->f=y;
	if(y) y->ch[c]=x;
}
void rot(Node *x){
	Node *y=x->f;ll c=x->rc();
	x->down();y->down();
	link(x,y->f,y->rc());
	link(x->ch[c^1],y,c);
	link(y,x,c^1);y->up();x->up();
	if(!x->f) s=x;
}
void splay(Node *x,Node *to=0){
	for(Node *y=x;x->f!=to;rot(x))
		if(y=x->f,y->f!=to)
			x->rc()==y->rc()?rot(y):rot(x);
}
Node *build(ll l,ll r,Node *f=0){
	if(l>r) return 0;
	ll mid=(l+r)/2;
	Node *x=new Node(c[mid],f);
	x->ch[0]=build(l,mid-1,x);
	x->ch[1]=build(mid+1,r,x);
	x->up();return x;
}
Node *k_th(ll k,Node *to=0,Node *x=s){
	ll sz=1;x->down();
	if(x->ch[0]) sz+=x->ch[0]->sz;
	if(k==sz) return splay(x,to),x;
	return k_th(k-(k>sz?sz:0),to,x->ch[k>sz]);
}
int main(){
	freopen("shuliec.in","r",stdin);freopen("shuliec.out","w",stdout);
	ll n=read();
	for(ll i=1;i<=n;i++) c[i]=read();
	s=build(0,n+1);
	ll m=read();char op[10];
	for(ll i=1;i<=m;i++){
		scanf("%s",op);
		if(op[0]=='A'){
			ll l=read(),r=read(),x=read();
			k_th(l);k_th(r+2,s);
			s->ch[1]->ch[0]->add(x);
		}else{
			ll l=read(),r=read();
			k_th(l);k_th(r+2,s);
			printf("%lld\n",s->ch[1]->ch[0]->sum);
		}
	}	
	fclose(stdin);fclose(stdout);
	return 0;
}