Pagini recente » Cod sursa (job #2909150) | Cod sursa (job #935460) | Cod sursa (job #697459) | Cod sursa (job #1477202) | Cod sursa (job #1137237)
#include<fstream>
using namespace std;
int v[100001],m,n,s[100001];
ifstream fin("aib.in");
ofstream fout("aib.out");
void update(int ind,int val)
{
int poz=0;
for(int poz=0;ind<=m;ind+=1<<poz,poz++)
{
v[ind]+=val;
for(;(ind&(1<<poz))==0;poz++);
}
}
int query(int ind)
{
int sol=0;
for(int poz=0;ind>0;ind-=1<<poz,poz++)
{
sol+=v[ind];
for(;(ind&(1<<poz))==0;poz++);
}
return sol;
}
int search(int k)
{
int step;
for(step=1;step<m;step<<=1);
for(int i=0;step;step>>=1)
{
if(i+step<=m && k>=v[i+step])
{
i+=step;
k-=v[i];
if(k==0)
return i;
}
}
return -1;
}
int main()
{
int poz,val,op,a,b;
fin>>m>>n;
for(int i=1;i<=m;i++)
{
fin>>val;
update(i,val);
}
for(int i=1;i<=n;i++)
{
fin>>op;
switch(op)
{
case 0: fin>>poz>>val;
update(poz,val);
break;
case 1: fin>>a>>b;
fout<<query(b)-query(a-1)<<"\n";
break;
case 2: fin>>a;
fout<<search(a)<<"\n";
}
}
return 0;
}