Pagini recente » Cod sursa (job #2217935) | Cod sursa (job #2610038) | Cod sursa (job #41860) | Cod sursa (job #2140742) | Cod sursa (job #3146575)
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int st,dr,mij,q,bb,ch,a,i,n,poz,x,lg,sum,m,b[318],v[100001];
int query (int lg,int n)
{
int sum=0;
while (lg<=n&&lg%m!=0)
{
sum+=v[lg];
lg++;
}
while (lg+m-1<=n)
{
sum+=b[lg/m];
lg+=m;
}
while (lg<=n)
{
sum+=v[lg];
lg++;
}
return sum;
}
void update (int pozv,int x)
{
poz=pozv/m;
b[poz]+=x;
v[pozv]+=x;
}
int main()
{
fin>>n>>q;
m=sqrt (n);
poz=0;
for (i=1; i<=n; i++)
{
fin>>v[i];
if (i%m==0)
poz++;
b[poz]+=v[i];
}
for (i=1; i<=q; i++)
{
fin>>ch;
if (ch==1)
{
fin>>a>>bb;
fout<<query (a,bb)<<"\n";
}
else
if (ch==0)
{
fin>>poz>>x;
update (poz,x);
}
else
{
fin>>sum;
st=1;
dr=n;
while (st<=dr)
{
mij=(st+dr)/2;
int suma=query (1,mij);
if (suma<sum)
st=mij+1;
else
dr=mij-1;
}
if (query (1,st)==sum)
fout<<st<<"\n";
else
fout<<"-1\n";
}
}
return 0;
}