Pagini recente » Cod sursa (job #301474) | Cod sursa (job #2465345) | Cod sursa (job #1199532) | Cod sursa (job #600771) | Cod sursa (job #1210857)
#include<fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int i,n,m,x,y,op,a[1000013];
int fsb(int x)
{
return (x&(-x));
}
void update(int poz,int x)
{
for(int i=poz;i<=n;i+=fsb(i)) a[i]+=x;
}
int query(int poz)
{
int i,s=0;
for(i=poz;i>0;i-=fsb(i)) s+=a[i];
return s;
}
int cauta(int val)
{
int i,step;
for(step=1; step<n; step<<=1);
for(i=0;step;step>>=1)
if(i+step<=n){
if(val>=a[i+step]){
i+=step;
val-=a[i];
if(!val) return i;
}
}
return (-1);
}
int main()
{
cin>>n>>m;
for(i=1;i<=n;i++){
cin>>x;
update(i,x);
}
while(m--){
cin>>op;
if(op==0){
cin>>x>>y;
update(x,y);
}
if(op==1){
cin>>x>>y;
cout<<query(y)-query(x-1)<<"\n";
}
if(op==2){
cin>>x;
cout<<cauta(x)<<"\n";
}
}
return 0;
}