Pagini recente » Cod sursa (job #699531) | Cod sursa (job #1386148) | Cod sursa (job #2338331) | Cod sursa (job #1107572) | Cod sursa (job #1761754)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define N 100100
using namespace std;
int v[N];
int n;
void update(int it,int val){
while(it<=n){
v[it]+=val;
//it=it+(it^ (it& (it-1) ) );
it=it+( (it& (-it) ) );
}
}
int sum(int it){
static int s;
s=0;
while(it>0){
s+=v[it];
it=it&(it-1);
}
return s;
}
int srch(int x){
static int span,k;
for(span=1;span<n; span<<=1);
for(k=0 ; span ; span>>=1){
if(k+span>n){
continue;
}
if(x>=v[k+span]){
k+=span;
x-=v[k];
if(!x){
return k;
}
}
}
return -1;
}
int main(){
int m,i,x,y;
int t;
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&x);
update(i,x);
}
for(i=0;i<m;i++){
scanf("%d",&t);
if(t==0){
scanf("%d%d",&x,&y);
update(x,y);
}else if(t==1){
scanf("%d%d",&x,&y);
printf("%d\n",sum(y)-sum(x-1) );
}else{
scanf("%d",&x);
printf("%d\n",srch(x));
}
}
return 0;
}