Cod sursa(job #700475)

Utilizator alexandrul_21Niculescu Mihai alexandrul_21 Data 1 martie 2012 10:34:07
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
struct nod{
	int nr,poz;
	nod *st,*dr;
}*r;
int n,m;
void insert(nod *&r,int nr,int poz){
	if(r==0){
		r=new nod;
		r->nr=nr;
		r->poz=poz;
		r->st=0;
		r->dr=0;
	}
	else
		if(nr<r->nr)
			insert(r->st,nr,poz);
		else
			if(nr>r->nr)
				insert(r->dr,nr,poz);
}
int minim(int a,int b,int c){
	int min=a;
	if(min>b)
		min=b;
	if(min>c)
		min=c;
	return min;
}
int find(nod *r,int x,int y){
	int a=n+1,b=n+1,c=n+1;
	if(r){
		if(r->poz<=y&&x<=r->poz)
				c=r->nr;
		a=find(r->st,x,y);
		b=find(r->dr,x,y);
	}
	return minim(a,b,c);
}
void read(){
	freopen("rmq.in","r",stdin);
	scanf("%d %d\n",&n,&m);
	int i,x,y;
	for(i=1;i<=n;i++){
		scanf("%d\n",&x);
		insert(r,x,i);
	}
	for(i=1;i<=m;i++){
		scanf("%d %d\n",&x,&y);
		printf("%d\n",find(r,x,y));
	}
	fclose(stdin);
}
void write(nod *r){
	if(r){
		write(r->st);
		printf("%d ",r->poz);
		write(r->dr);
	}
}
int main(){
	freopen("rmq.out","w",stdout);
	read();
	fclose(stdout);
	return 0;
	
}