记录编号 83954 评测结果 AAAAAAAAA
题目名称 数列操作B 最终得分 100
用户昵称 Gravatar雪狼 是否通过 通过
代码语言 C++ 运行时间 0.126 s
提交时间 2013-12-08 12:44:09 内存使用 3.37 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define REP(i,a,b) for(int i=a;i!=b+1;++i)
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define MAX_N 100010
int sum[MAX_N<<2],add[MAX_N<<2];

void PutUP(int root){
	sum[root]=sum[root<<1]+sum[root<<1|1];
}

void PutDOWN(int root,int num){
	add[root<<1]+=add[root];
	add[root<<1|1]+=add[root];
	sum[root<<1]+=(num>>1|1)*add[root];
	sum[root<<1|1]+=(num>>1)*add[root];
	add[root]=0;
}	

void build(int root,int l,int r){
	add[root]=0;
	if(l==r){scanf("%d",&sum[root]);return;}
	int mid=(l+r)>>1;
	build(lson);
	build(rson);
	PutUP(root);
}

void update(int root,int l,int r,int L,int R,int x){
	if(r<L||R<l)return;
	if(L<=l&&r<=R){
		add[root]+=x;
		sum[root]+=(r-l+1)*x;
		return;
	}
	PutDOWN(root,r-l+1);
	int mid=(l+r)>>1;
	update(lson,L,R,x);
	update(rson,L,R,x);
	PutUP(root);
}

long long query(int root,int l,int r,int x){
	if(r<x||x<l)return 0;
	if(x<=l&&r<=x)return sum[root];
	PutDOWN(root,r-l+1);
	int mid=(l+r)>>1;
	return query(lson,x)+query(rson,x);
}

void setOI(string s){
	string a=s+".in",b=s+".out";
	freopen(a.c_str(),"r",stdin);
	freopen(b.c_str(),"w",stdout);
}

int main(){
	int n,m,a,b,c;char op[10];
	setOI("shulieb");
	scanf("%d",&n);if(!n)return 0;
	build(1,1,n);
	scanf("%d",&m);
	while(m--){
		scanf("%s",op);
		if(op[0]=='Q'){
		    scanf("%d",&a);
			printf("%d\n",query(1,1,n,a));
		}
		else{
		    scanf("%d %d %d",&a,&b,&c);
			update(1,1,n,a,b,c);
		}
	}		
	return 0;
}