问题描述:
样本输入
样本输出:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int maxn=100005;
int a[maxn],b[maxn];
int n;//在写程序时一直读不出来求和,是因为
//定义了一个n,在主函数中又定义了一个n
int lowbit(int x)
{
return x&(-x);
}
void update(int x,int v)
{
while(x<=n)
{
a[x]+=v;
x += lowbit(x);
}
}
int getsum(int x)
{
int sum=0;
while(x)
{
sum +=a[x];
x -=lowbit(x);
}
return sum;
}
int main()
{
int j,t,k,m,flag,v,cal;
scanf("%d",&t);
for(k=1;k<=t;k++)
{
scanf("%d%d",&n,&m);
memset(a,0,sizeof(a));//记录a的值
for(int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
update(i,b[i]);//将b的值传递给a;
}
printf("Case %d:\n",k);
int i;
while(m--)
{
scanf("%d",&flag);
if(flag==1)
{
scanf("%d",&i);//输入第i个数;
printf("%d\n",b[i+1]);
update(i+1,-b[i+1]);//将b[i+1]的值传递给a
b[i+1]=0;
}
else if(flag==2)
{
scanf("%d%d",&i,&v);
update(i+1,v);
b[i+1]+=v;
}
else
{
scanf("%d%d",&i,&j);
cal=getsum(j+1)-getsum(i);
printf("%d\n",cal);
}
}
}
return 0;
}