Pagini recente » Cod sursa (job #214496) | Cod sursa (job #599083) | Cod sursa (job #546673) | Cod sursa (job #2827250) | Cod sursa (job #748757)
Cod sursa(job #748757)
# include <fstream>
# include <iostream>
# define DIM 100003
using namespace std;
int n, m, a[DIM];
void upd (int p, int v)
{
while(p<=n)
{
a[p]+=v;
p+=p^(p&(p-1));
}
}
int query(int p)
{
int s=0;
while(p)
{
s+=a[p];
p-=p^(p&(p-1));
}
return s;
}
int find(int s)
{
int i=0, stp;
for(stp=1;stp<n;stp<<=1);
for(i=0;stp;stp>>=1)
if (i+stp<=n)
if (s>=a[i+stp])
{
i+=stp;
s-=a[i];
if (!s)return i;
}
return -1;
}
int main ()
{
ifstream fin ("aib.in");
ofstream fout ("aib.out");
fin>>n>>m;
int t, x, y;
for(int i=1;i<=n;++i)
{
fin>>x;
upd(i, x);
}
for(int i=1;i<=m;++i)
{
fin>>t;
if (t==2)
{
fin>>x;
fout<<find(x)<<"\n";
}
else
{
fin>>x>>y;
if (t==0)upd(x, y);
else fout<<query(y)-query(x-1)<<"\n";
}
}
return 0;
}