记录编号 |
562201 |
评测结果 |
AAAAAAAAAAAAAAA |
题目名称 |
数列操作A |
最终得分 |
100 |
用户昵称 |
AAAAAAAA |
是否通过 |
通过 |
代码语言 |
C |
运行时间 |
1.232 s |
提交时间 |
2021-07-04 11:08:48 |
内存使用 |
48.13 MiB |
显示代码纯文本
#include<stdio.h>
#include<stdlib.h>
int data,sum,max;
char t[5];
int a[4000040][3],p[1000001];//A数组0:节点左边界,1:节点右边界,2:范围和
void build(int root,int lc,int rc)
{
a[root][0]=lc;a[root][1]=rc;
if(lc==rc)
{
return ;
}
int mid=(lc+rc)/2;
build(root*2,lc,mid);build(root*2+1,mid+1,rc);
}
void add(int root,int xh,int delta)
{
a[root][2]+=delta;
if(a[root][0]==a[root][1])
{
// a[root][2]+=delta;
return ;
}
int mid=(a[root][0]+a[root][1])/2;
if(xh<=mid) add(root*2,xh,delta);
if(xh>mid) add(root*2+1,xh,delta);
}
int ask(int root,int l,int r)
{
if(a[root][0]==l&&a[root][1]==r)
return a[root][2];
int mid=(a[root][0]+a[root][1])/2;
if(r<=mid) return ask(root*2,l,r);
if(l>mid) return ask(root*2+1,l,r);
return ask(root*2,l,mid)+ask(root*2+1,mid+1,r);
}
int main()
{
freopen("shulie.in","r",stdin);
freopen("shulie.out","w",stdout);
int n,i;scanf("%d",&n);build(1,1,n);
for(i=1;i<=n;i++)
{
scanf("%d",&data);
add(1,i,data);
}
int m,k,d,q=0;
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%s",t);
scanf("%d%d",&k,&d);
if(t[0]=='A')
{
add(1,k,d);
}
else
{
// printf("%d\n",ask(1,k,d));
p[q]=ask(1,k,d);
q++;
}
}
for(i=0;i<q;i++)
{
printf("%d\n",p[i]);
}
return 0;
}