Cod sursa(job #1257438)

Utilizator j.loves_rockJessica Joanne Patrascu j.loves_rock Data 7 noiembrie 2014 19:17:55
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
using namespace std;

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

#define NMAX 100005

int RMQ[20][NMAX],N,Log2[NMAX],M;


void Init(){
    for (int j = 1; j <= N; j++) {
        f>>RMQ[0][j];
    }
    for (int i = 2; i <= N; i++) {
        Log2[i] = Log2[i/2]+1;
    }
}

void GenerateRMQ(){
    for(int i=1;(1<<i)<=N;i++){
        for(int j=1;j<=N-(1<<i)+1;j++){
            RMQ[i][j]=min(RMQ[i-1][j],RMQ[i-1][j+(1<<(i-1))]);
        }
    }
}
void Read(){
    f>>N>>M;

    Init();
    GenerateRMQ();

    int x,y;
    for (int i = 1; i <= M; i++) {
        f>>x>>y;
        int dif = y-x+1;
        int k = Log2[dif];
        g<<min(RMQ[k][x],RMQ[k][y-(1<<k)+1])<<"\n";
    }
}
int main()
{
    Read();
    return 0;
}