rt,函数递归的时候定义变量…… QAQ
顺便有人能帮我看看这个爆了怎么办吗
样例输入:
5 5
1 5 4 2 3
1 1 3
2 2 5
1 3 -1
1 4 2
2 1 4
#include <iostream>
using namespace std;
int n,m,f[2000001],a[500001];
inline void buildtree(int k, int l , int r){
if (l == r){
f[k] = a[l];
return;
}
int m = (l+r) >> 1;
buildtree(k+k, l, m);
buildtree(k+k+1, m+1, r);
f[k] = f[k+k] + f[k+k+1];
}
inline void add(int k, int l, int r, int x, int y){
f[k] += y;
if (l == r) return;
int m = (l+r) >> 1;
if (x <= m)
add(k+k,l,m,x,y);
else
add(k+k+1,m+1,r,x,y);
}
int calc(int k, int l, int r, int s, int t){
if (l == s && r == t) return f[k];
int m = (l+r) >> 1;
if (t <= m) return calc(k+k,l,m,s,t);
else
if (s > m) return calc(k+k+1,m,r,s,t);
else return calc(k+k,l,m,s,t) + calc(k+k+1,m+1,r,s,t);
}
int main(){
scanf("%d%d",&n,&m);
for (int i = 1; i <= n; i++)
scanf("%d",&a[i]);
buildtree(1,1,n);//编号、左右端点
int d,x,y;
for (int i = 1; i <= m; i++){
scanf("%d%d%d",&d,&x,&y);
if (d == 1) add(1,1,n,x,y);
else cout << calc(1,1,n,x,y) << " ";
}
}