Pagini recente » Cod sursa (job #1512866) | Cod sursa (job #2375943) | Cod sursa (job #596749) | Cod sursa (job #1552851) | Cod sursa (job #1456937)
#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 (BIT[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 (BIT[k] != val) k = -1;
printf("%d\n", k);
}
}
return 0;
}