Pagini recente » Cod sursa (job #2378048) | Cod sursa (job #72519) | Cod sursa (job #1334992) | Cod sursa (job #576838) | Cod sursa (job #2111936)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,tree[100005];
void update(int pos,int val)
{
while(pos<=n)
{
tree[pos]+=val;
pos+=(pos&(~pos+1));
}
}
int querry(int pos)
{
int rez=0;
while(pos>0)
{
rez+=tree[pos];
pos-=(pos&(~pos+1));
}
return rez;
}
int Search(int val)
{
int step,i=0;
for(step=1;step<n;step=step*2);
while(step>0)
{
if(i+step<=n && val>=tree[i+step])
{
i+=step;
val-=tree[i];
if(val==0)
return i;
}
step/=2;
}
return -1;
}
int main()
{
int m,i,x,y,op;
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>x;
update(i,x);
}
for(i=1;i<=m;i++)
{
f>>op;
if(op==0)
{
f>>x>>y;
update(x,y);
}
else
{
if(op==1)
{
f>>x>>y;
g<<querry(y)-querry(x-1)<<'\n';
}
else
{
f>>x;
g<<Search(x)<<'\n';
}
}
}
return 0;
}