Pagini recente » Cod sursa (job #183397) | Cod sursa (job #1584627) | Cod sursa (job #1175363) | Cod sursa (job #1916904) | Cod sursa (job #2322792)
#include <bits/stdc++.h>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int a[100001],n;
void upd(int i,int x){
while(i<=n){
a[i]+=x;
i+=(i&(-i));
}
}
int cer1(int i){
int s=0;
while(i>0){
s+=a[i];
i-=(i&(-i));
}
return s;
}
int cer2(int x){
int pas=(1<<17),r=0,s=x;
for(; pas; pas/=2)
if(r+pas<=n && a[r+pas]<x)
x-=a[(r+=pas)];
if(cer1(r+1)!=s)
return -1;
return r+1;
}
int main(){
int m,i,j,t;
in>>n>>m;
for(i=1; i<=n; ++i){
in>>j;
upd(i,j);
}
while(m--){
in>>t>>i;
if(!t){
in>>j;
upd(i,j);
}
else if(t==1){
in>>j;
out<<cer1(j)-cer1(i-1)<<"\n";
}
else
out<<cer2(i)<<"\n";
}
return 0;
}