Pagini recente » Cod sursa (job #323933) | Profil capitanulsefultau | Cod sursa (job #857573) | Cod sursa (job #357098) | Cod sursa (job #2019645)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int ub(int x)
{
return (x&(x-1))^x;
}
int x,aib[100000],n,m;
void upgrade(int poz,int val)
{
int i;
for (i=poz;i<=n;i+=ub(i))
{
aib[i]+=val;
}
}
int Suma(int x)
{
int i,S=0;
for (i=x;i>0;i-=ub(i))
{
S+=aib[i];
}
return S;
}
int in,y,nr,mij;
int main()
{
int i;
f>>n>>m;
for (i=1;i<=n;i++)
{
f>>x;
upgrade(i,x);
}
for (i=1;i<=m;i++)
{
f>>in;
if (in==1)
{
f>>x>>y;
g<<Suma(y)-Suma(x-1)<<'\n';
}
else
if (in==0)
{
f>>x>>y;
upgrade(x,y);
}
else
{
f>>nr;
int st=1;
int dr=n;
int poz=0;
while (st<=dr&&!poz)
{
mij=(st+dr)/2;
if (Suma(mij)==nr)
{
poz=mij;
break;
}
else
if (Suma(mij)<nr)
{
st=mij+1;
}
else
{
dr=mij-1;
}
}
if (poz!=0)
{
g<<poz<<'\n';
}
else
{
g<<"-1"<<'\n';
}
}
}
return 0;
}