Pagini recente » Cod sursa (job #122894) | Cod sursa (job #948701) | Cod sursa (job #1458797) | Cod sursa (job #1748454) | Cod sursa (job #1048364)
#include <fstream>
#define Nmax 100005
using namespace std;
int v[Nmax],N;
inline void Add(int p,int x)
{
int k;
while(p<=N)
{
v[p]+=x;
k=(p&(-p));
p+=k;
}
}
inline int Query(int p)
{
int k,suma=0;
while(p>0)
{
suma+=v[p];
k=(p&(-p));
p-=k;
}
return suma;
}
inline int BSearch(int a)
{
int st,dr,mij,x;
st=1;dr=N;
while(st<=dr)
{
mij=(st+dr)/2;
x=Query(mij);
if(x==a)
return mij;
if(x<a)
st=mij+1;
else
dr=mij-1;
}
return -1;
}
int main()
{
int M,i,x,y,tip,sol;
ifstream fin("aib.in");
ofstream fout("aib.out");
fin>>N>>M;
for(i=1;i<=N;++i)
{
fin>>x;
Add(i,x);
}
while(M--)
{
fin>>tip;
if(tip==0)
{
fin>>x>>y;
Add(x,y);
}
else
if(tip==1)
{
fin>>x>>y;
sol=Query(y)-Query(x-1);
fout<<sol<<"\n";
}
else
{
fin>>x;
sol=BSearch(x);
fout<<sol<<"\n";
}
}
fin.close();
fout.close();
return 0;
}