Pagini recente » Cod sursa (job #2533852) | Cod sursa (job #1301987) | Cod sursa (job #264761) | Cod sursa (job #542372) | Cod sursa (job #1920495)
#include<fstream>
#include<cmath>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int inf=1<<30;
int v[200002];
int binsearch(int lf, int rh,int vl){
int mij,indx,aux,s;
mij=(lf+rh)/2;
while(lf<rh){
s=0;
indx=mij;
while(indx){
s+=v[indx];
indx=indx&(indx-1);
}
//if(vl==s)break;
if(vl<=s)rh=mij;
else lf=mij+1;
mij=(lf+rh)/2;
}
s=0;
indx=mij;
while(indx){
s+=v[indx];
indx=indx&(indx-1);
}
if(s==vl)return mij;
return -1;
}
int main(){
int n,m,i,x,p,a,b,s,aux;
int indx;
fin>>n>>m;
for(i=1;i<=n;i++){
fin>>x;
indx=i;
while(indx<=n){
v[indx]+=x;
aux=indx;
indx=indx&(-indx);
indx=aux+indx;
}
}
for(i=1;i<=m;i++){
fin>>p>>a;
if(p==0){
fin>>b;
indx=a;
while(indx<=n){
v[indx]+=b;
aux=indx;
indx=indx&(-indx);
indx=aux+indx;
}
}
if(p==1){
fin>>b;
s=0;
indx=b;
while(indx){
s+=v[indx];
indx=indx&(indx-1);
}
indx=a-1;
while(indx){
s-=v[indx];
indx=indx&(indx-1);
}
fout<<s<<'\n';
}
if(p==2)fout<<binsearch(1,n,a)<<'\n';
}
fin.close();
fout.close();
return 0;
}