Pagini recente » Cod sursa (job #634321) | Cod sursa (job #1046735) | Cod sursa (job #2189571) | Cod sursa (job #1635682) | Cod sursa (job #999397)
Cod sursa(job #999397)
#include <fstream>
#define zero(x) ( (x ^ (x - 1)) & x )
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int i,j,k,n,q,r,aib[300000],v[150001],sumep[150001],a,b,x;
void sum(int loc,int val)
{
int i;
for (i=loc;i<=n;i+=zero(i))
aib[i]+=val;
}
int query(int val)
{
int i;
int suma=0;
for (i=val;i>0;i-=zero(i))
suma+=val;
return suma;
}
int search(int val)
{
int i,s;
for (s=1;s<=val;s<<=1);
for (i=0;s;s>>=1)
if (sumep[i+s]<=val&&i+s<=n)
i+=s;
return i;
}
int main()
{
fin>>n>>q>>r;
for (i=1;i<=n;++i)
{
fin>>v[i];sum(i,v[i]);
sumep[i]=sumep[i-1]+v[i];
}
for (i=1;i<=q;++i)
{
fin>>r;
if (!r)
{
fin>>a>>b;
sum(a,b);
}
else if(r==1)
{
fin>>a>>b;
fout<<(query(b)-query(a-1))<<'\n';
}
else if (r==2)
{
fin>>a;
x=search(a);
if (sumep[x]==a)
fout<<x<<'\n';
else fout<<"-1\n";
}
}
return 0;
}