Pagini recente » Cod sursa (job #625309) | Cod sursa (job #625313) | Cod sursa (job #105705) | Cod sursa (job #682109) | Cod sursa (job #996552)
Cod sursa(job #996552)
#include <iostream>
#include <fstream>
#define DN 100005
using namespace std;
int v[DN],n,m;
inline int lsb(int x)
{
return x^(x&(x-1));
}
void update(int poz,int x)
{
for(;poz<=n;poz+=lsb(poz))
v[poz]+=x;
}
int query(int poz)
{
int rez=0;
for(;poz;poz-=lsb(poz))
rez+=v[poz];
return rez;
}
int main()
{
ifstream f("aib.in");
ofstream g("aib.out");
f>>n>>m;
for(int i=1;i<=n;++i)
{
int x;
f>>x;
update(i,x);
}
for(;m;--m)
{
int op;
f>>op;
if(op==0)
{
int a,b;
f>>a>>b;
update(a,b);
}
if(op==1)
{
int a,b;
f>>a>>b;
g<<query(b)-query(a-1)<<"\n";
}
if(op==2 )
{
int k,rez=0;
f>>k;
for(int bit=15;bit>=0;--bit)
{
if( rez+(1<<bit) <=n && v[ rez + (1<<bit) ]<=k )
{
rez+=(1<<bit);
k-=v[rez];
}
}
if(k)
g<<"-1\n";
else
g<<rez<<"\n";
}
}
return 0;
}