Cod sursa(job #2517786)

Utilizator OvidRata Ovidiu Ovid Data 4 ianuarie 2020 11:27:02
Problema Range minimum query Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in"); ofstream fout("rmq.out");

int N,M, A[100010],K[350];


int main() {
fin>>N>>M;
int sq=floor(sqrt(N));

for(int i=0; i<(N/sq); i++){
    K[i]=200000;
    for(int j=i*sq; (j-i*sq)<sq; j++){
        fin>>A[j];
        K[i]=min(K[i], A[j]);
    }
}
for(int i=(N/sq)*sq; i<N; i++){
    fin>>A[i];
}








int a, b, c, d, f;
for(;M;M--){
    fin>>a>>b;
    f=1000000000;
    c=a/sq+1; d=b/sq;
    if(d<=c){
        for(int i=a-1; i<b; i++){
            f=min(f, A[i]);
        }
    }
    else{
        for(int i=c; i<d; i++){
            f=min(f, K[i]);
        }
        
        c*=sq; d*=sq;
        for(int i=a-1; i<c; i++){
            f=min(f, A[i]);
        }
        
        for(int i=d-1; i<b; i++){
            f=min(f, A[i]);
        }
        
    }
    fout<<f<<"\n";
}


    return 0;
}