Pagini recente » Istoria paginii runda/cls11_10febr/clasament | Cod sursa (job #2365366) | Cod sursa (job #1752624) | Cod sursa (job #1402684) | Cod sursa (job #1456952)
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
#define zeros(x) ((x ^ (x - 1)) & x)
using namespace std;
int N, M, BIT[100001], LOG;
inline void update(int p, int x){
for (int i = p; i <= N; i += zeros(i))
BIT[i] += x;
}
inline int query(int p){
int ans = 0;
for (int i = p; i; i -= zeros(i))
ans += BIT[i];
return ans;
}
inline int search(int val){
int step = LOG, k = 0;
for (; step; step >>= 1){
if (k + step > N) continue;
else if (query(k + step) < val) k += step;
}
if (query(++k) != val) return -1;
return k;
}
int main(){
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
scanf("%d %d", &N, &M);
for (int i = 1, x; i <= N; ++i)
scanf("%d", &x),
update(i, x);
for (LOG = 1; LOG <= N; LOG <<= 1);
for (int type, a, b; M; --M){
scanf("%d", &type);
if (type < 2){
scanf("%d %d", &a, &b);
if (!type) update(a, b);
else printf("%d\n", query(b) - query(a - 1));
}
else
scanf("%d", &a),
printf("%d\n", search(a));
}
return 0;
}