Pagini recente » Cod sursa (job #2182679) | Cod sursa (job #375869) | Cod sursa (job #2950995) | Cod sursa (job #1263569) | Cod sursa (job #1346721)
#include <cstdio>
using namespace std;
#define MAX_N 100001
int n;
int aib[MAX_N];
inline int lsb(int x) {
return x & -x;
}
void update(int pos, int val) {
for(; pos <= n; pos += lsb(pos))
aib[pos] += val;
}
int query(int pos) {
int s = 0;
for(; pos; pos -= lsb(pos))
s += aib[pos];
return s;
}
int main() {
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
int i, m, op, a, b, start, fin, mid, k;
scanf("%d %d", &n, &m);
for(i = 1; i <= n; i++) {
scanf("%d", &a);
update(i, a);
}
for(i = 1; i <= m; i++) {
scanf("%d %d", &op, &a);
if(op == 0) {
scanf("%d", &b);
update(a,b);
}
else if(op == 1) {
scanf("%d", &b);
printf("%d\n", query(b) - query(a-1));
}
else {
start = 1; fin = n; k = -1;
while(start <= fin) {
mid = (start+fin) >> 1;
b = query(mid);
if(b > a)
fin = mid-1;
else if(b < a)
start = mid+1;
else {
fin = mid-1;
k = mid;
}
}
printf("%d\n", k);
}
}
return 0;
}