Pagini recente » Cod sursa (job #1257534) | Cod sursa (job #1647171) | Rating Simona Poilinca (simona.poilinca) | Cod sursa (job #2567954) | Cod sursa (job #2962404)
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int a[100001],v[100001],n,m;
int query(int p)
{
int suma=0,i;
for(i=p;i;i=i-(i&-i))
{
suma=suma+a[i];
}
return suma;
}
void update(int p,int x)
{
int i;
for(i=p;i<=n;i=i+(i&-i))
{
a[i]=a[i]+x;
}
}
int main()
{int i,j,x,op,y,s,st,dr,mij,ok;
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>x;
update(i,x);
}
for(i=1;i<=m;i++)
{
f>>op;
if(op==0)
{
f>>x>>y;
update(x,y);
}
if(op==1)
{
f>>x>>y;
s=query(y)-query(x-1);
g<<s<<'\n';
}
if(op==2)
{
f>>x;
st=1; dr=n; ok=0;
while(st<=dr&&!ok)
{
mij=(st+dr)/2;
if(a[mij]==x)
{
ok=1;
}
else
{
if(a[mij]>x)
{
dr=mij-1;
}
else
{
st=mij+1;
}
}
}
if(ok)
{
g<<mij<<'\n';
}
else
{
g<<-1<<'\n';
}
}
}
return 0;
}