1 条题解

  • 0
    @ 2023-11-25 21:43:25

    这是一道树状数组的题目,具体解析请看教案啦

    下面是手敲的完整AC代码,仅供参考(请勿直接复制)

    #include<cstdio>
    using namespace std;
    int c[100010],a[100010];
    int n;
    int m;
    int lowbit(int x)
    {
    	return x&-x;
    }
    int sum(int x)
    {
    	int ret=0;
    	while (x>0)
    	{
    		ret=ret+c[x];
    		x-=lowbit(x);
    	}
    	return ret;
    }
    void add(int x,int d)
    {
    	while (x<=n)
    	{
    		c[x]+=d;
    		x+=lowbit(x);
    	}
    }
    int main()
    {
    	scanf("%d",&n);
    	for (int i=1;i<=n;i++)
    	{
    		scanf("%d",&a[i]);
    		add(i,a[i]);
    	}
    	scanf("%d",&m);
    	for (int i=1;i<=m;i++)
    	{
    		char tmp;
    		int tmp1,tmp2;
    		scanf(" %c%d%d",&tmp,&tmp1,&tmp2);
    		if (tmp=='Q')
    		{
    			printf("%d\n",sum(tmp2)-sum(tmp1-1));
    		}
    		else
    		{
    			int delta=-a[tmp1]+tmp2;
    			a[tmp1]=tmp2;
    			add(tmp1,delta);
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    772
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    151
    已通过
    22
    上传者