Cod sursa(job #2731134)

Utilizator ililogIlinca ililog Data 27 martie 2021 13:02:26
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
using namespace std;
#include <fstream>
#include <iostream>
 
const int N=1e5+2;
 
ifstream fin("rmq.in");
ofstream fout("rmq.out");
 
int n,q,st,dr;
int RMQ[20][N],p2[N];
 
void precalc()
{
    p2[1]=0;
    for(int i=1; i<N; i++) {
        p2[i] = p2[i/2]+1;
    }
 
    for(int i=1; i<=p2[n]; i++) {
        for(int j=1; j<=n-(1<<i)+1; j++) {
            RMQ[i][j] = min(RMQ[i-1][j],RMQ[i-1][j+(1<<(i-1))]);
        }
    }
        
}
 
int query(int st,int dr)
{
    int k = p2[dr-st+1]-1;
    
    return min(RMQ[k][st], RMQ[k][dr-(1<<k)+1]);
}
 
int main()
{
    fin>>n >> q;
    
    for(int i=1; i<=n; i++) {
        fin >> RMQ[0][i];
    }
 
    precalc();
 
    for(int i=1; i<=q; i++) {
        fin >> st >> dr;
        
        fout << query(st,dr)<<'\n';
    }
    return 0;
}