Cod sursa(job #2873167)

Utilizator Vasile_AndreiVasile Andrei Calin Vasile_Andrei Data 18 martie 2022 19:32:37
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

int n,len,i,j,v[100001],w[2001],mn,q,x,y;

int main(){
    fin>>n>>q;
    len=(int)sqrt((double)n);

    for(i=0;i<n;i++){
        fin>>v[i];
        if(i%len==0) w[i/len]=v[i];
        else w[i/len]=min(w[i/len],v[i]);
    }

    for(i=1;i<=q;i++){
        fin>>x>>y;
        mn=1000000000;
        x--; y--;

        for(j=x;j<=y;){
            if(j%len!=0 || j+len>y){
                mn=min(mn,v[j]);
                j++;
            }
            else{
                mn=min(mn,w[j/len]);
                j+=len;
            }
        }

        fout<<mn<<'\n';
    }

    fin.close();
    fout.close();
    return 0;
}