<br /><span id="_xhe_temp" width="0" height="0"><br /></span>#include <iostream> #include <cstdio> #include <cstdlib> #include <string.h> #define manx 200100 using namespace std; int a[manx]; struct Node{ int l,r;long long val; }seg[manx<<2]; void build(int node,int l,int r) { seg[node].l=l; seg[node].r=r; if(l==r){seg[node].val=a[l];return;} int mid=(l+r)/2; build(node*2,l,mid); build(node*2+1,mid+1,r); seg[node].val=seg[node*2].val+seg[node*2+1].val; } long long query(int node,int l,int r) { if(seg[node].l==l&&seg[node].r==r) return seg[node].val; int mid=(seg[node].l+seg[node].r)/2; if(l>mid) return query(node*2+1,l,r); else if(r<=mid) return query(node*2,l,r); else { return query(node*2,l,mid)+query(node*2+1,mid+1,r); } } void update(int node,int p,int val) { seg[node].val+=val; if(seg[node].l==seg[node].r)return; int mid=(seg[node].l+seg[node].r)/2; if(p<=mid)update(node*2,p,val); else if(p>mid)update(node*2+1,p,val); } int main() { int t;char str[5];int l,r; while(scanf("%d",&t)!=-1) { for(int i=1;i<=t;i++) scanf("%d",&a[i]); build(1,1,t); while(scanf("%s",str)!=-1) { if(str[0]=='E')break; if(str[0]=='S') { scanf("%d%d",&l,&r); update(1,l,r-a[l]); a[l]=r; } if(str[0]=='M') { scanf("%d%d",&l,&r); printf("%lld\n",query(1,l,r)); } } } return 0; }
NEFU 1215
最新推荐文章于 2020-03-06 16:53:53 发布