Cod sursa(job #1315688)

Utilizator mateidanutDanut Gabriel Matei mateidanut Data 12 ianuarie 2015 23:50:01
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#include <math.h>
using namespace std;

ifstream f("date.in");
ofstream g("date.out");

int a[10000], i, j, n, m, x, y, rad, b[10000], st, dr, mini;

int main()
{	f>>n>>m;
	for (i=1; i<=n; ++i) f>>a[i];
	rad=int(sqrt(n));
	b[0]=a[1];
	for (i=2; i<=n; ++i)
	{	j=i;
		while (i/rad==(i-1)/rad && i<=n)
		{	b[i/rad]=min(b[i-1], a[i]);
			++i;
		}
		b[i]=a[i];
	}
	for (i=1; i<=m; ++i)
	{	f>>x>>y;
		st=x/rad;
		dr=y/rad;
		if (x==rad*st) mini=b[st];
		else
		{	mini=a[x];
			for (j=x+1; j<rad*(st+1) && j<=y; ++j) mini=min(a[j], mini);
		}
		for (j=st+1; j<=dr-1; ++j) mini=min(mini, b[j]);
		for (j=dr*rad; j<=y; ++j) mini=min(mini, a[j]);
		g<<mini<<'\n';
	}
    return 0;
}