Cod sursa(job #389133)

Utilizator SzabiVajda Szabolcs Szabi Data 1 februarie 2010 00:36:04
Problema Arbori indexati binar Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>
 int  n=0,m=0;
int  tree[100001];


  int read(int idx){
 int  sum=0;
while (idx>0){

sum+=tree[idx];
idx-=(idx & -idx);
}
return sum;

}

void update(int idx,int val){

	while(idx<=n){

tree[idx]+=val;
idx+= (idx & -idx);
	}

}

 int  elso(int a){
  int i=1;
bool jo=false;

while((!jo)&&(i<=n)){
	if (read(i)==a){jo=true;}else{i++;}

}

if (jo) {return i;}else {return -1;}
}

int main(void){
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
tree[0]=0;
  int i=0,temp,a,b;

scanf("%d %d",&n,&m);

for(i=1;i<=n;i++){

scanf("%d",&temp);
update(i,temp);
}

for(i=1;i<=m;i++){
scanf("%d",&temp);

switch(temp){

case 0:
	scanf("%d %d",&a,&b);
	update(a,b);
	break;
case 1:
	scanf("%d %d",&a,&b);
	printf("%d\n",read(b)-read(a-1));

	break;
case 2:
scanf("%d",&a);
printf("%d\n",elso(a));
	break;

}

}
return 0;
}