Pagini recente » Cod sursa (job #1030306) | Arhiva de probleme | Cod sursa (job #738197) | Cod sursa (job #2473418) | Cod sursa (job #2003406)
#include<fstream>
using namespace std;
ifstream fi("aib.in");
ofstream fo("aib.out");
int F[100001],n,i,x,y,tip,m;
void update(int poz, int val)
{
while(poz<=n)
{
F[poz]+=val;
poz=poz+(poz&(poz^(poz-1)));
}
}
int f(int poz)
{
int s=0;
while(poz>0)
{
s+=F[poz];
poz=poz-(poz&(poz^(poz-1)));
}
return s;
}
int query(int st, int dr)
{
return f(dr)-f(st-1);
}
int bs(int val)
{
int mij,st,dr,a;
st=1;
dr=n;
while(st<=dr)
{
mij=(st+dr)/2;
a=query(1,mij);
if(a<val)
{
st=mij+1;
}
else
{
dr=mij-1;
}
}
if(query(1,st)==val)
return st;
else
return -1;
}
int main()
{
fi>>n>>m;
for(i=1; i<=n; i++)
{
fi>>x;
update(i,x);
}
for(i=1; i<=m; i++)
{
fi>>tip;
if(tip==0)
{
fi>>x>>y;
update(x,y);
}
if(tip==1)
{
fi>>x>>y;
fo<<query(x,y)<<"\n";
}
if(tip==2)
{
fi>>x;
fo<<bs(x)<<"\n";
}
}
fi.close();
fo.close();
return 0;
}