Pagini recente » Cod sursa (job #164627) | Cod sursa (job #117468) | Cod sursa (job #193063) | Cod sursa (job #1648140) | Cod sursa (job #2382789)
#include <bits/stdc++.h>
using namespace std;
int v[100009];
int n,m,t,p,a,b;
void update(int ind,int val)
{
int c=0;
while(ind<=n)
{
v[ind]+=val;
while(!(ind&(1<<c)))//ind e par facut misto
{
c++;
}
ind+=(1<<c);
c++;
}
}
int query(int ind)
{
int c=0,s=0;
while(ind>0)
{
s+=v[ind];
while(!(ind&(1<<c)))
{
c++;
}
ind-=(1<<c);
c++;
}
return s;
}
int serch(int val)
{
int i,step;
step=1;
while(2*step<=n)
{
step*=2;
}
for(i=0; step; step/=2)
{
if(i+step<=n)
{
if(val>=v[i+step])
{
i+=step;
val-=v[i];
if(!val)
{
return i;
}
}
}
}
return -1;
}
int main()
{
ifstream fin("aib.in");
ofstream fout("aib.out");
fin>>n>>m;
for(int i=1; i<=n; ++i)
{
fin>>t;
update(i,t);
}
for(int i=1; i<=m; ++i)
{
fin>>p;
switch(p)
{
case 0:
fin>>a>>b;
update(a,b);
break;
case 1:
fin>>a>>b;
fout<<query(b)-query(a-1)<<"\n";
break;
case 2:
fin>>a;
fout<<serch(a)<<"\n";
break;
}
}
return 0;
}