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