Cod sursa(job #1765432)

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

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int a[100000],rmq[20][100000],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]=i;
   }
   for(j=1;int(pow(2,j))<=n;j++){
    for(i=0;i+int(pow(2,j))-1<n;i++){
        if (a[rmq[i][j-1]]<a[rmq[i+int((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(a[rmq[l][k]],a[rmq[l+r-l+1-int(pow(2,k))][k]])<<endl;

    }

    return 0;

}