Pagini recente » Cod sursa (job #37005) | Cod sursa (job #2833172) | Cod sursa (job #505431) | Cod sursa (job #1114801) | Cod sursa (job #3173295)
#include<fstream>
using namespace std;
const unsigned int dim=100002;
#define z(x) (x&(-x))
ifstream f("aib.in");
ofstream g("aib.out");
unsigned int n;
unsigned int A[dim];
void upd(unsigned int ind, unsigned int v)
{
for(unsigned int i=ind; i<=n; i+=z(i))
{
A[i]+=v;
}
}
unsigned int sum(unsigned int ind)
{
unsigned int s=0;
for(unsigned int i=ind; i>0; i-=z(i))
{
s+=A[i];
}
return s;
}
int main()
{
unsigned int i,j,x,a,b,q,m;
int k;
unsigned int st,dr,mij;
f>>n>>m;
for(i=1; i<=n; i++)
{
f>>x;
upd(i,x);
}
while(m--)
{
f>>q;
if(q==0)
{
f>>a>>b;
upd(a,b);
}
else if(q==1)
{
f>>a>>b;
unsigned int s=sum(b)-sum(a-1);
g<<s<<'\n';
}
else if(q==2)
{
f>>a;
k=-1;
st=1;
dr=n;
while(st<=dr)
{
mij=(st+dr)/2;
x=sum(mij);
if(a==x)
{
k=mij;
dr=mij-1;
}
else if(a<x)
{
dr=mij-1;
}
else if(a>x)
{
st=mij+1;
}
}
g<<k<<'\n';
}
}
return 0;
}