Pagini recente » Cod sursa (job #555023) | Cod sursa (job #1414900) | Cod sursa (job #2466013) | Cod sursa (job #1195373) | Cod sursa (job #2727387)
#include <bits/stdc++.h>
#define scanf (void)!scanf
using namespace std;
void Files(){
(void)!freopen("aib.in", "r", stdin);
(void)!freopen("aib.out", "w", stdout);
}
int bit[100002];
int N, M, val;
int sum(int idx){
int ret = 0;
for(;idx > 0;idx -= idx & -idx)
ret += bit[idx];
return ret;
}
int Query(int l, int r){
return sum(r) - sum(l - 1);
}
void add(int idx, int delta){
for(;idx <= N;idx += idx & -idx)
bit[idx] += delta;
}
int SearchIdx(int target){
int l = 1, r = N, ans = -1;
while(l <= r){
int m = (l + r) >> 1;
int val = sum(m);
if(val == target)
ans = m;
if(val < target) l = m + 1;
else r = m - 1;
}
return ans;
}
int main(){
Files();
scanf("%d%d", &N, &M);
for(int i = 1;i <= N;i++){
scanf("%d", &val);
add(i, val);
}
while(M--){
int t, x, y;
scanf("%d", &t);
if(t == 0)
scanf("%d%d", &x, &y), add(x, y);
if(t == 1)
scanf("%d%d", &x, &y), printf("%d\n", Query(x, y));
if(t == 2)
scanf("%d", &x), printf("%d\n", SearchIdx(x));
}
}