Pagini recente » Cod sursa (job #289358) | Cod sursa (job #1500752) | Cod sursa (job #594290) | Cod sursa (job #559588) | Cod sursa (job #1542339)
#include <fstream>
using namespace std;
#define nmax 100001
ifstream fin("aib.in");
ofstream fout("aib.out");
int X,n,x,p,AIB[nmax],m,a,b;
int lsb(int i){
return i-(i&i-1);//i&(-i)
}
void update(int p,int x){
int i;
for(i=p;i<=n;i+=lsb(i))//i+=i&(-i)
AIB[i]+=x;
//X[p]+=x;
}
int query(int p){
int s=0,i;
for(i=p;i>=1;i-=lsb(i))//i+=i&(-i)
s+=AIB[i];
return s;}
int search(int v){
int lo=1,hi=n,mij,s;
while(lo<=hi)
{ mij=(lo+hi)/2;
s=query(mij);
if(s==a)
return mij;
if(s<a)
lo=mij+1;
if(s>a)
hi=mij-1;}
return -1;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{fin>>X;
update(i,X);}
int q;
for(int i=1;i<=m;i++)
{fin>>q;
if(q==0)
{fin>>a>>b;
update(a,b);}
else{
if(q==1)
{fin>>a>>b;
fout<<query(b)-query(a-1)<<"\n";}}
if(q==2)
{fin>>a;
fout<<search(a)<<"\n";}
}
//sum(a,b)=query(b)-query(a-1)
return 0;
}