Pagini recente » Cod sursa (job #2618914) | Cod sursa (job #1371387) | Cod sursa (job #1369461) | Cod sursa (job #2917355) | Cod sursa (job #1471726)
#include <cstdio>
using namespace std;
const int MAX = 100001;
int n, m, bit[MAX];
void update(int pos, int val){
while(pos<=n){
bit[pos] += val;
pos = pos + (pos&(-pos));
}
}
int query(int pos){
int ans = 0;
while(pos>0){
ans += bit[pos];
pos = pos - (pos&(-pos));
}
return ans;
}
int getpos(int val){
int ans = 0;
int pos = 1;
while(pos<n) pos<<=1;
while(pos>0){
if(ans+pos<=n)
if(bit[ans+pos]<=val){
val -= bit[ans+pos];
ans += pos;
if(val==0) return ans;
}
pos>>=1;
}
return -1;
}
int main()
{
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++){
int x;
scanf("%d", &x);
update(i, x);
}
for(int i=1; i<=m; i++){
int cod, a, b;
scanf("%d%d", &cod, &a);
if(cod!=2) scanf("%d", &b);
if(cod==0) update(a, b);
if(cod==1) printf("%d\n", query(b)-query(a-1));
if(cod==2) printf("%d\n", getpos(a));
}
return 0;
}