Pagini recente » Istoria paginii utilizator/danciu_domnita_elena_323ca | Istoria paginii runda/test-magic/clasament | Cod sursa (job #352246) | Istoria paginii runda/test_pozitiv/clasament | Cod sursa (job #2175087)
#include <fstream>
#define nmax 100002
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int v[nmax],n,val,m,vel,poz,x,y;
void update(int poz)
{
while(poz<=n)
{
v[poz]+=val;
poz+=(poz&-poz);
}
}
int query(int poz)
{
int s=0;
while(poz)
{
s+=v[poz];
poz-=(poz&-poz);
}
return s;
}
int cauta(int val)
{
int p,q;
for(p=1;p<=n;p<<=1);
for(q=0;p;p>>=1)
{
if(q+p<=n&&val>=v[q+p])
{
val-=v[p+q];
q+=p;
if(!val)
return q;
}
}
return -1;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
fin>>val;
update(i);
}
for(int i=1;i<=m;i++)
{
fin>>vel;
if(vel==0)
{
fin>>poz>>val;
update(poz);
}
if(vel==1)
fin>>x>>y,fout<<query(y)-query(x-1)<<"\n";
if(vel==2)
fin>>val,fout<<cauta(val)<<"\n";
}
return 0;
}