Pagini recente » Cod sursa (job #2260511) | Cod sursa (job #614166) | Cod sursa (job #3145059) | Cod sursa (job #348621) | Cod sursa (job #404029)
Cod sursa(job #404029)
#include<fstream.h>
int aib[100100],n,u;
void plus(int i, int x)
{
while(i<=n)
{
aib[i]+=x;
i=(i|(i-1))+1;
}
}
int sum(int i)
{
int s=0;
while(i)
{
s+=aib[i];
i&=(i-1);
}
return s;
}
int query(int x)
{
int i=0,p=u;
while(p)
{
if(i+p<=n)
if(x>=aib[i+p])
{
x-=aib[i+p];
i+=p;
if(!x)
return i;
}
p>>=1;
}
return -1;
}
int main()
{
int m,i,x,op,a,b;
ifstream f("aib.in");
ofstream g("aib.out");
f>>n>>m;
u=1;
while(u<n)
u<<=1;
for(i=1;i<=n;i++)
{
f>>x;
plus(i,x);
}
while(m--)
{
f>>op;
if(op==2)
{
f>>a;
g<<query(a)<<'\n';
}
else
{
f>>a>>b;
if(!op)
plus(a,b);
else
g<<sum(b)-sum(a-1)<<'\n';
}
}
return 0;
}