Cod sursa(job #982421)

Utilizator classiusCobuz Andrei classius Data 9 august 2013 11:19:15
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 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[y-((1<<k)-1)][k] ? a[x][k] : a[y-((1<<k)-1)][k])<<'\n';
    }


    return 0;
}