Cod sursa(job #1083071)

Utilizator TeOOOVoina Teodora TeOOO Data 15 ianuarie 2014 16:10:28
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
//Include
#include <stdio.h>
#include <algorithm>
using namespace std;
FILE *in, *out;

const int sz = (int)1e5+1;

//Variabile
int elements, questions;
int rmq[18][sz];
int Log[sz];

//Main
int main()
{
	in=fopen("rmq.in", "rt");
	out=fopen("rmq.out", "wt");
	fscanf(in, "%d%d", &elements, &questions);
	for(int i=1; i<=elements; ++i)
        fscanf(in, "%d", &rmq[0][i]);
    for(int i=2; i<=elements; ++i)
        Log[i] = Log[i/2]+1;
    for(int i=1; i<=Log[elements]; ++i)
        for(int j=1 ; j<=elements - (1<<i)+1 ; ++j)
            rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + (1<<(i-1))]);

    int left, right;
    while(questions--)
    {
        fscanf(in, "%d%d", &left, &right);
        int line = Log[right - left + 1];
        fprintf(out, "%d\n", min(rmq[line][left], rmq[line][right - (1<<line) + 1]));
    }

	fclose(in);
	fclose(out);
	return 0;
}