Pagini recente » Cod sursa (job #2582643) | Cod sursa (job #543557) | Cod sursa (job #152991) | Cod sursa (job #912343) | Cod sursa (job #3319810)
#include <bits/stdc++.h>
using namespace std;
#define in "aib.in"
#define out "aib.out"
#define dim 100001
int N, M;
int aib[dim];
void update(int i, int val) {
for (; i <= N; i += (i & -i))
aib[i] += val;
}
int query(int i) {
int sum = 0;
for (; i > 0; i -= (i & -i))
sum += aib[i];
return sum;
}
int cauta(int x) {
int st = 1, dr = N, ans = -1;
while (st <= dr) {
int mid = (st + dr) / 2;
int s = query(mid);
if (s == x) return mid;
if (s < x) st = mid + 1;
else dr = mid - 1;
}
return -1;
}
int main() {
freopen(in, "r", stdin);
freopen(out, "w", stdout);
scanf("%d%d", &N, &M);
for (int i = 1, x; i <= N; i++) {
scanf("%d", &x);
update(i, x);
}
while (M--) {
int tip;
scanf("%d", &tip);
if (tip == 0) {
int pos, val;
scanf("%d%d", &pos, &val);
update(pos, val);
}
else if (tip == 1) {
int x, y;
scanf("%d%d", &x, &y);
printf("%d\n", query(y) - query(x - 1));
}
else if (tip == 2) {
int val;
scanf("%d", &val);
printf("%d\n", cauta(val));
}
}
return 0;
}