Cod sursa(job #666901)

Utilizator valentina506Moraru Valentina valentina506 Data 22 ianuarie 2012 13:52:16
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream>
#include<algorithm>
using namespace std;

long i,j,n,m,tip,a1,a2,x;
long a[600010];
inline void schimba(long nod,long st,long dr,long poz,long val)
{
	long mij;
	if(st==dr)
		a[nod]=val;
	else
	{
	mij=(st+dr)/2;
	if(poz<=mij)
	schimba(nod*2,st,mij,poz,val);
	else
		schimba(nod*2+1,mij+1,dr,poz,val);
	a[nod]=min(a[nod*2],a[nod*2+1]);
	}
}
inline void detmin(long nod,long st,long dr,long a1,long b)
{
	long mij;
	if(a1<=st&&b>=dr)
	{
		if(a[nod]<x)
			x=a[nod];
		return ;
	}
	if(st<dr)
	{
		mij=(st+dr)/2;
		if(a1<=mij)
			detmin(nod*2,st,mij,a1,b);
		if(mij<b)
			detmin(nod*2+1,mij+1,dr,a1,b);
	}
}
int main()
{
	FILE *f=fopen("rmq.in","r");
	FILE *g=fopen("rmq.out","w");
	fscanf(f,"%ld%ld",&n,&m);
	for(i=1;i<=n;++i)
	{
		fscanf(f,"%ld",&x);
		schimba(1,1,n,i,x);
	}
	for(i=1;i<=m;++i)
	{
		fscanf(f,"%ld%ld%",&a1,&a2);
			x=1<<30;
			detmin(1,1,n,a1,a2);
			fprintf(g,"%ld\n",x);
		
	}
	return 0;
}