Pagini recente » Cod sursa (job #2351708) | Cod sursa (job #327070) | Cod sursa (job #2098858) | Cod sursa (job #140306) | Cod sursa (job #2378355)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,d[100010],cod,aux;
int bitmin(int poz)
{
return (poz&(-poz));
}
void upd(int poz,int val)
{
while(poz<=n)
{
d[poz]+=val;
poz+=bitmin(poz);
}
}
int que(int poz)
{
int s=0;
while(poz>0)
{
s+=d[poz];
poz-=bitmin(poz);
}
return s;
}
int rez(int s)
{
int l=aux,baza=0;
for(l=aux; l!=0; l=l>>1)
{
if(d[baza+l]<=s&&baza+l<=n)
{
baza+=l;
s=s-d[baza];
if(s==0)
return baza;
}
}
return -1;
}
int main()
{
int val,poz1,poz2,i,s,poz;
fin>>n>>m;
poz=1;
while(poz<=n)
{
aux=poz;
poz=poz<<1;
}
for(i=1; i<=n; i++)
{
fin>>val;
upd(i,val);
}
for(i=1; i<=m; i++)
{
fin>>cod;
if(cod==0)
{
fin>>poz>>val;
upd(poz,val);
}
else
{
if(cod==1)
{
fin>>poz1>>poz2;
fout<<que(poz2)-que(poz1-1)<<'\n';
}
else
{
fin>>s;
fout<<rez(s)<<'\n';
}
}
}
}