Pagini recente » Cod sursa (job #2931023) | Cod sursa (job #190272) | Cod sursa (job #870962) | Cod sursa (job #2636213) | Cod sursa (job #2229687)
#include <iostream>
#include <fstream>
#define zeros(x) (x^(x-1))&x
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,i,x,y;
int A[100005];
void addvlap(int p,int v)
{
for(int i=p;i<=n;i+=zeros(i))
A[i]+=v;
}
int sum1p(int p)
{
int rez=0;
for(int i=p;i>0;i-=zeros(i))
rez+=A[i];
return rez;
}
int prims(int s)
{
int i,step,k=0;
for(step=1;step<n;step<<=1);
for(i=0;step;step>>=1)
if(i+step<=n && A[i+step]+k<=s)
{
i+=step;
k+=A[i];
}
return i;
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x;
addvlap(i,x);
}
for(i=1;i<=m;i++)
{
fin>>x;
if(x==0)
{
fin>>x>>y;
addvlap(x,y);
}
else if(x==1)
{
fin>>x>>y;
fout<<sum1p(y)-sum1p(x-1)<<"\n";
}
else
{
fin>>y;
fout<<prims(y)<<"\n";
}
}
}