Cod sursa(job #2134048)

Utilizator eduardandrei20Nechifor Eduard Andrei eduardandrei20 Data 17 februarie 2018 16:14:28
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>
std::ifstream in("rmq.in");
std::ofstream out("rmq.out");
using namespace std;
int d[25][100005];
int lg[100005];
int n,m;
int main()
{
    int x,y;
    in >> n >> m ;
    lg[0]=1;
    for(int i = 2 ; i <= n  ;++i)
           lg[i]=lg[i/2]+1;
     // ca sa fac in o(1);
     for(int j = 1; j <= n ;++j)
         in>>d[0][j];
     //asta i prima


     for( int i =1 ; i <=lg[n];++i)
        for( int j = 1; j <= n-(1<<(i-1)); ++j)
                  d[i][j]=min(d[i-1][j],d[i-1][j+(1<<(i-1))]);


                  // am precalculat

                  for ( int i =1 ; i <= m ; ++i)
                  {
                       in >> x >> y ;
                       int k = lg[y-x+1];
                       out << min(d[k][x],d[k][y-(1<<k)+1]);
                       out<<"\n";
                  }


    return 0;
}