Pagini recente » Cod sursa (job #827113) | Cod sursa (job #3190585) | Cod sursa (job #858042) | Cod sursa (job #3132787) | Cod sursa (job #1456950)
#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;
void update(int p, int x){
for (int i = p; i <= N; i += zeros(i))
BIT[i] += x;
}
int query(int p){
int ans = 0;
for (int i = p; i; i -= zeros(i))
ans += BIT[i];
return ans;
}
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;
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 {
int k, val;
scanf("%d", &val);
k = search(val);
if (query(k) != val) k = -1;
printf("%d\n", k);
}
}
return 0;
}