Pagini recente » Profil cnt_tst | Cod sursa (job #418780) | Istoria paginii utilizator/fremen | Cod sursa (job #3212340) | Cod sursa (job #563746)
Cod sursa(job #563746)
# include <fstream>
using namespace std;
ifstream f ("aib.in");
ofstream g ("aib.out");
int a[100005],x,i,n,m,q,w;
void adauga (int i,int x)
{
while (i<=n)
{
a[i]+=x;
i+=(i^(i-1))&i;
}
}
int sum (int i)
{
int s=0;
while (i>0)
{
s+=a[i];
i-=(i^(i-1))&i;
}
return s;
}
void cauta (int i,int j)
{
int x;
while (i<=j)
{
w=(i+j)/2;
x=sum (w);
if (x==q)
break;
else
if (q<x)
j=w-1;
else
i=w+1;
}
if (j<i)
w=-1;
}
int main ()
{
f>>n>>m;
for (i=1;i<=n;i++)
{
f>>x;
adauga (i,x);
}
for (i=1;i<=m;i++)
{
f>>x;
if (x==0)
{
f>>q>>w;
adauga (q,w);
}
if (x==1)
{
f>>q>>w;
g<<sum (w)-sum (q-1)<<"\n";
}
if (x==2)
{
f>>q;
w=0;
cauta (1,n);
g<<w<<"\n";
}
}
return 0;
}