Cod sursa(job #1765442)

Utilizator cyber_ghSoltan Gheorghe cyber_gh Data 26 septembrie 2016 18:59:17
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int a[100100],rmq[100000][20],i,j,n,m,l,r;

int main()
{
   fin >>n>>m;
   for(i=0;i<n;i++) fin >>a[i];
   for(i=0;i<n;i++){
    rmq[i][0]=a[i];
   }
   for(j=1;int(pow(2,j))<=n;j++){
    for(i=0;i+int(pow(2,j))-1<n;i++){
        if (rmq[i][j-1]<rmq[i+int(pow(2,j-1))][j-1]) rmq[i][j]=rmq[i][j-1];
        else rmq[i][j]=rmq[i+int(pow(2,j-1))][j-1];
    }

   }

 /*   for(i=0;i<=5;i++) {
        for(j=0;j<=5;j++) fout <<rmq[i][j]<<" ";
        fout <<endl;
    }
*/

    for(i=1;i<=m;i++){
        fin >>l>>r;
        l--;
        r--;

        int k=int(log(r-l+1));
        fout <<min(rmq[l][k],rmq[l+r-l+1-int(pow(2,k))][k])<<endl;

    }

    return 0;

}