Pagini recente » Cod sursa (job #2135005) | Cod sursa (job #778037) | Cod sursa (job #2123803) | Cod sursa (job #548958) | Cod sursa (job #2414490)
#include <cstdio>
using namespace std;
const int NMAX = 100002;
int aib[NMAX];
int n;
void update(int idx, int val){
for(;idx<=NMAX;idx+=idx&-idx)
aib[idx]+=val;
}
int query(int idx){
int ans=0;
for(;idx;idx-=idx&-idx)
ans+=aib[idx];
return ans;
}
int main(){
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
int m,x;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%d",&x);
update(i,x);
}
int caz,a,b;
// for(int i=1;i<=n;++i)
// printf("%d ",aib[i]);
// printf("\n");
for(;m;m--){
scanf("%d%d",&caz,&a);
if(caz==2){
int nowSum=0,best=0;
for(int step=17;step>=0;step--){
if(best+(1<<step)<NMAX && nowSum + aib[best+(1<<step)]<a){
best+=(1<<step);
nowSum+=aib[best];
}
}
++best;
if(query(best)==a)
printf("%d\n",best);
else
printf("-1\n");
}else{
scanf("%d",&b);
if(caz==0)
update(a,b);
if(caz==1)
printf("%d\n",query(b)-query(a-1));
}
}
return 0;
}