Cod sursa(job #1796898)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 3 noiembrie 2016 21:14:38
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define INF 2140000000
#define MaxN 100005
#define MaxLog 17
using namespace std;
      
FILE *IN,*OUT;
int N,M,v[MaxLog][MaxN],L[MaxN],X,Y,Log;


int main()
{
    IN=fopen("rmq.in","r");
    OUT=fopen("rmq.out","w");

	fscanf(IN,"%d%d",&N,&M);
	for(int i=2;i<=N;i++)
		L[i]=L[i/2]+1;
	for(int i=1;i<=N;i++)
		fscanf(IN,"%d",&v[0][i]);
	for(int i=1;i<=N;i++)
		for(int j=1;j<MaxLog;j++)
			v[j][i]=min(v[j-1][i],INF*!(i>1<<j-1)+v[j-1][i-(1<<j-1)]);
	for(int i=1;i<=M;i++)
	{
		fscanf(IN,"%d%d",&X,&Y);
		Log=L[Y-X+1];
		fprintf(OUT,"%d\n",min(v[Log][Y],v[Log][X+(1<<Log)-1]));
	}
    return 0;
}