支持单点修改
#include <cstdio> using namespace std; int n, m; int a[500001], c[500001]; int lowbit(int x) { return x & -x; } int sum(int x) { int ans = 0; while(x) { ans += c[x]; x -= lowbit(x); } return ans; } void add(int x, int d) { while(x <= n) { c[x] += d; x += lowbit(x); } } int main() { int i, j, x, y, z; scanf("%d %d", &n, &m); for(i = 1; i <= n; i++) { scanf("%d", &a[i]); add(i, a[i]); } for(i = 1; i <= m; i++) { scanf("%d %d %d", &z, &x, &y); if(z == 1) add(x, y); else printf("%d\n", sum(y) - sum(x - 1)); } return 0; }