1 条题解
-
0
这是一道树状数组的题目,具体解析请看教案啦
下面是手敲的完整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
- 上传者