Pagini recente » Cod sursa (job #1342315) | Cod sursa (job #624376) | Cod sursa (job #1320896) | Cod sursa (job #2145985) | Cod sursa (job #2020939)
#include <stdio.h>
#define MAX 100005
#define z(x) (x & (-x))
int n, m, t, x, y;
int a[MAX];
void u(int p, int v){
for(int i = p; i <= n; i += z(i))
a[i] += v;
}
int q(int x){
int s = 0;
while(x){
s += a[x];
x -= z(x);
}
return s;
}
int cb(int s){
int l = 1, r = n;
while(l <= r){
int m = (l + r) / 2;
int v = q(m);
if(v == s)
return m;
v < s ? (l = m + 1) : (r = m - 1);
}
return -1;
}
int main(){
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i){
scanf("%d", &x);
u(i, x);
}
for(int i = 0; i < m; ++i){
scanf("%d%d", &t, &x);
if(t == 0){
scanf("%d", &y);
u(x, y);
}
else if(t == 1){
scanf("%d", &y);
printf("%d\n", q(y) - q(x - 1));
}
else
printf("%d\n", cb(x));
}
return 0;
}