Cod sursa(job #1425860)

Utilizator vlad_mose1928vlad mosessohn vlad_mose1928 Data 28 aprilie 2015 11:15:52
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>
#include <iostream>

using namespace std;

int n,m,i,j, a, b,p;

int D[19][100010];
int P[100010];
int main() {
    ifstream fin ("rmq.in");
    ofstream fout("rmq.out");
    fin>>n>>m;
    for (i=1;i<=n;i++)
        fin>>D[0][i];


    for (i=1;(1<<i) <= n; i++) {
        for (j=1;j<=n;j++) {
            D[i][j] = D[i-1][j];
            if (j + ( 1<<(i-1) ) <= n && D[i][j] > D[i-1][ j + ( 1<<(i-1) ) ])
                D[i][j] = D[i-1][ j + ( 1<<(i-1) ) ];
        }
    }

    P[1] = 0;
    for (i=2;i<=n;i++)
        P[i] = 1 + P[i/2];


    for (i=1;i<=m;i++) {
        fin>>a>>b;
        p = P[b-a+1];
        fout<<min(D[p][a], D[p][ b- (1<<p) + 1 ])<<"\n";
    }



    return 0;
}