Pagini recente » Cod sursa (job #1260996) | Cod sursa (job #161371) | Cod sursa (job #2025734) | Cod sursa (job #1634465) | Cod sursa (job #3247797)
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
const long long N = 200000;
long long bit[N+9];
void update (long long i, long long val){
while(i<=N){
bit[i]+=val;
i+=i&-i;
}
}
long long prefix(long long i){
long long sum = 0;
while(i>0){
sum+=bit[i];
i-=i&-i;
}
return sum;
}
long long cb(long long x, long long n){
long long st=1, dr=n, rez = 0;
while(st<=dr){
long long m=(st+dr)/2;
if(prefix(m)<=x){
rez = m;
st=m+1;
}
else{
dr=m-1;
}
}
return rez;
}
int main()
{
long long t,n;
cin>>n>>t;
for (long long i = 1; i<=n;i++){
long long x;
cin>>x;
update(i,x);
}
for (long long i = 1; i<=t;i++){
long long op;
cin>>op;
if(op==0){
long long x,add;
cin>>x>>add;
update(x,add);
}
if(op==1){
long long x,y;
cin>>x>>y;
cout<<prefix(y)-prefix(x-1)<<'\n';
}
if(op==2){
long long s;
cin>>s;
long long poz = cb(s,n);
if(prefix(poz)==s)
cout<<poz<<'\n';
else
cout<<-1<<'\n';
}
}
return 0;
}