Cod sursa(job #982407)

Utilizator classiusCobuz Andrei classius Data 9 august 2013 10:47:52
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>
#include <cmath>

using namespace std;

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

int a[1000001][18]={};

int main()
{
    int n,m;

    f>>n>>m;

    for(int i=1;i<=n;i++)
        f>>a[i][0];

    for(int j=1;(1<<j)<=n;j++)
        for(int i=1;i<=n;i++)
            if(i+(1<<j)-1<=n)
                a[i][j]=a[i][j-1]<a[i+(1<<j)-1][j-1] ? a[i][j-1] : a[i+(1<<j)-1][j-1] ;
            else
                a[i][j]=a[i][j-1]<a[n][j-1] ? a[i][j-1] : a[n][j-1];

    for(int t=1;t<=m;t++){
        int x,y;
        f>>x>>y;

        int k=(int)log(double(y-x+1))/log(2.0);
        g<<(a[x][k] < a[x+k][k] ? a[x][k] : a[x+k][k])<<'\n';
    }


    return 0;
}