Cod sursa(job #914448)

Utilizator dragangabrielDragan Andrei Gabriel dragangabriel Data 14 martie 2013 09:38:57
Problema Range minimum query Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<cstdio>
#include<algorithm>
#define inf 2000000000
using namespace std;
int m,n,i,j,k,x,y,a,b,rez,v[100005];

void update(int nod,int st,int dr)
{
	int mij=(st+dr)/2;
	if (st==dr) v[nod]=x;else
	{
	if (i<=mij) update(2*nod,st,mij);else
			update(2*nod+1,mij+1,dr);
	v[nod]=min(v[2*nod],v[2*nod+1]);
	}
}

void query(int nod,int st,int dr)
{
	int mij=(st+dr)/2;
	if (a<=st && dr<=b)
		{rez=min(rez,v[nod]);
			return;}	
	if (a<=mij) query(2*nod,st,mij);
	if (mij<b) query(2*nod+1,mij+1,dr);
}

int main()
{
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);
	scanf("%d %d",&n,&m);
	fill(v+1,v+100000+1,inf);
	for (i=1;i<=n;i++) scanf("%d",&x),update(1,1,n);
	for (i=1;i<=m;i++)
	{
		scanf("%d %d",&a,&b);
		rez=inf;
		query(1,1,n);
		printf("%d\n",rez);
	}
	return 0;
}