Cod sursa(job #896705)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 27 februarie 2013 16:52:00
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#define nmax 100100
#define lmax 18
using namespace std;

int N,M,A[lmax][nmax],Log2[nmax];

int Query(int x,int y) {

    return min(A[Log2[y-x+1]][x],A[Log2[y-x+1]][y-(1<<Log2[y-x+1])+1]);

}
void rmq() {

    int i,j;

    for(i=2;i<=N;i++)
        Log2[i]=Log2[i>>1]+1;

    for(i=1;(1<<i)<=N;i++)
        for(j=1;j+(1<<i)-1<=N;j++)
            A[i][j]=min(A[i-1][j],A[i-1][j+(1<<(i-1))]);

}
void read(ifstream & in) {

    in>>N>>M;

    for(int i=1;i<=N;i++)
        in>>A[0][i];

}
int main() {

    int x,y;
    ifstream in("rmq.in");
    ofstream out("rmq.out");

    read(in);
    rmq();

    while(M--) {

        in>>x>>y;
        out<<Query(x,y)<<'\n';

        }

    in.close();
    out.close();

    return 0;

}