题目
思路
树状数组模板~
代码
#include <iostream>
#include <cstring>
#define MAXX 50001
using namespace std;
int c[MAXX];
int n;
int lowbit(int x)
{
return x & (-x);
}
int sum(int i) //求1,i之间的和
{
int ans = 0; //一定记得初始化
while (i > 0)
{
ans += c[i];
i -= lowbit(i);
}
return ans;
}
void update(int i, int k)
{
while (i <= n)
{
c[i] += k;
i += lowbit(i);
}
}
int main()
{
int N;
cin >> N;
for (int i = 1; i <= N; ++i)
{
cin >> n; //忘记了输入。。
memset(c, 0, sizeof c);
int t;
for (int j = 1; j <= n; ++j)
{
//cin >> t;
scanf("%d",&t);
update(j, t);
}
printf("Case %d:\n", i);
while (true)
{
string string1;
cin >> string1;
if (string1[0] == 'E')
break;
int x, y;
// cin >> x >> y;
scanf("%d%d",&x,&y);
if (string1[0] == 'Q')
cout << sum(y) - sum(x - 1) << endl; //这里x要-1才符合
else if (string1[0] == 'A')
update(x, y);
else
update(x, -y);
}
}
return 0;
}
注意
我惑了啊,一直TEL,检查了好几遍,后来发现应该用scanf输入,55555,以后就都用scanf输入好了,记住