Pagini recente » Cod sursa (job #1291604) | Cod sursa (job #717335) | Cod sursa (job #2691778) | Cod sursa (job #3259384) | Cod sursa (job #2455511)
#include <fstream>
using namespace std;
int a[100001];int n,m;
ifstream cin("aib.in");
ofstream cout("aib.out");
#define lsb(i) ((i) & -(i))
void update(int pos,int x)
{
for(int i=pos;i<=n;i+=lsb(i))
a[i]+=x;
}
int sum(int pos)
{
int s=0;
for(int i=pos;i>=1;i-=lsb(i))
s+=a[i];
return s;
}
int Search(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()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
int x;
for(int i=1;i<=n;i++)
{
cin>>x;
update(i,x);
}
int c,a,b;
for(int i=1;i<=m;i++)
{
cin>>c;
if(c==0)
{
cin>>a>>b;
update(a,b);
}
else if(c==1)
{
cin>>a>>b;
cout<<sum(b)-sum(a-1)<<"\n";
}
else if(c==2)
{
cin>>a;
cout<<Search(a)<<"\n";
}
}
return 0;
}