记录编号 |
83954 |
评测结果 |
AAAAAAAAA |
题目名称 |
数列操作B |
最终得分 |
100 |
用户昵称 |
雪狼 |
是否通过 |
通过 |
代码语言 |
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;
}