Pagini recente » Cod sursa (job #2453271) | Cod sursa (job #1830040) | Cod sursa (job #2968963) | Cod sursa (job #1451356) | Cod sursa (job #1765321)
#include <stdio.h>
FILE *in,*out;
long n, m, aib[100005],x,suma=5,a,b,rezultat;
int op;
void update(long i, long val){
i=i+1;
while(i<=n){
aib[i]+=val;
i = i + (i & -i);
}
}
void citireAIB(){
for(long i=0; i<n; i++){
fscanf(in,"%ld",&x); //
update(i,x);
}
}
long obtSuma(long i){
long s=0;
while(i>0){
s+=aib[i];
i = i - (i & -i);
}
return s;
}
long cautBin(long x){
long st=1, dr=n, mij;
while (st<=dr){
mij=(st+dr)/2;
suma = obtSuma(mij);
if (suma==x){
return mij;
}
else if (suma>x){
dr=mij-1;
}
else st=mij+1;
}
return -1;
}
void op0(){
fscanf(in,"%ld%ld", &a, &b); //
update(a,b);
}
void op1(){
fscanf(in,"%ld%ld", &a, &b); //
suma = obtSuma(b) - obtSuma(a-1);
fprintf(out,"%ld\n", suma); //
}
void op2(){
fscanf(in,"%ld",&a);
rezultat = cautBin(a);
fprintf(out,"%ld\n",rezultat);
}
int main()
{
in=fopen("aib.in", "r");
out =fopen("aib.out", "w");
fscanf(in,"%ld%ld",&n,&m); //
for(long i=1; i<=n; i++){
aib[i]=0;
}
citireAIB();
for(long z=1; z<=m; z++){
fscanf(in,"%d",&op);
if(op==0) op0();
else if(op==1) op1();
else if(op==2) op2();
}
return 0;
}