Pagini recente » Cod sursa (job #832562) | Cod sursa (job #1429448) | Istoria paginii runda/cihcahul01/clasament | Cod sursa (job #1704368) | Cod sursa (job #936541)
Cod sursa(job #936541)
#include<fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int i,n,m,x,y,op,a[100010];
void update(int p,int v)
{
int c=0;
while(p<=n)
{
a[p]+=v;
while(!(p&(1<<c)))
++c;
p+=(1<<c);
++c;
}
}
int query(int p)
{
int c=0,s=0;
while(p)
{
s+=a[p];
while(!(p&(1<<c)))
++c;
p-=(1<<c);
++c;
}
return s;
}
int search(int v)
{
int i,pas;
for(pas=1;pas<n;pas<<=1);
for(i=0;pas;pas>>=1)
{
if(i+pas<=n)
{
if(v>=a[i+pas])
{
i+=pas;
v-=a[i];
if(v==0)
return i;
}
}
}
return -1;
}
int main()
{
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<<query(y)-query(x-1)<<'\n';
}
else
{
f>>x;
g<<search(x)<<'\n';
}
}
return 0;
}