Pagini recente » Cod sursa (job #194837) | Cod sursa (job #96261) | Cod sursa (job #1208951) | Cod sursa (job #1097669) | Cod sursa (job #2131892)
#include <bits/stdc++.h>
#define lsb(x) (-x)&x
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
vector < int > aib;
int n,q,x,op,a,b;
void adauga (int poz, int val)
{
for(int i=poz; i<=n; i+=lsb(i))
aib[i]+=val;
}
int suma (int poz)
{
int s=0;
for(int i=poz; i>0; i-=lsb(i))
s+=aib[i];
return s;
}
int caut_bin (int s)
{
int st=1;
int dr=n;
int mij;
int poz=-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(aib[mij]==s)
{
poz=mij;
dr=mij-1;
}
else if(aib[mij]>s)
dr=mij-1;
else
st=mij+1;
}
return poz;
}
int main()
{
in>>n>>q;
aib=vector < int > (n+1,0);
for(int i=1; i<=n; i++)
{
in>>x;
adauga(i,x);
}
for(;q;q--)
{
in>>op;
if(op==0)
{
in>>a>>b;
adauga(a,b);
}
else if(op==1)
{
in>>a>>b;
out<<suma(b)-suma(a-1)<<'\n';
}
else if(op==2)
{
in>>a;
out<<caut_bin(a)<<'\n';
}
}
return 0;
}