Pagini recente » Cod sursa (job #405743) | Cod sursa (job #2138819) | Cod sursa (job #1053145) | Cod sursa (job #2151025) | Cod sursa (job #3191719)
#include <stdio.h>
#define MAXN 100000
int bit[MAXN + 1];
void update(int poz, int x, int n) {
while(poz <= n) {
bit[poz] += x;
poz += poz & -poz;
}
}
int query(int poz) {
int rez = 0;
while(poz > 0) {
rez += bit[poz];
poz &= poz - 1;
}
return rez;
}
int main() {
FILE *fin, *fout;
int n, m, i, t, a, b, st, dr, mij;
fin = fopen("aib.in", "r");
fscanf(fin, "%d%d", &n, &m);
for(i = 0; i < n; i++) {
fscanf(fin, "%d", &a);
update(i + 1, a, n);
}
fout = fopen("aib.out", "w");
for(i = 0; i < m; i++) {
fscanf(fin, "%d%d", &t, &a);
if(t == 0) {
fscanf(fin, "%d", &b);
update(a, b, n);
} else if(t == 1) {
fscanf(fin, "%d", &b);
fprintf(fout, "%d\n", query(b) - query(a - 1));
} else {
st = 1;
dr = n + 1;
while(dr - st > 1) {
mij = (st + dr) / 2;
if(query(mij) > a)
dr = mij;
else
st = mij;
}
fprintf(fout, "%d\n", query(st) == a ? st : -1);
}
}
fclose(fout);
fclose(fin);
return 0;
}