Cod sursa(job #2395848)

Utilizator T_george_TGeorge Teodorescu T_george_T Data 2 aprilie 2019 22:14:44
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int rmq[100000][32],n,a[100001],m;
void build_rmq(){
    for(int i=0;i<n;i++)
        rmq[i][0]=a[i];
    for(int j=1;(1<<j)<=n;j++)
    for(int i=0;(i+(1<<j)-1)<n;i++){
        if(rmq[i][j-1]<rmq[i+(1<<(j-1))][j-1])
        rmq[i][j]=rmq[i][j-1];
        else
        rmq[i][j]=rmq[i+(1<<(j-1))][j-1];
    }
}
int interogare(int i,int j){
    int pow=(int)log2(j-i+1);
    if(rmq[i][pow]<=rmq[j-(1<<pow)+1][pow])
        return rmq[i][pow];
    return rmq[j-(1<<pow)+1][pow];
}
int main()
{
    in>>n>>m;
    for(int i=0;i<n;i++)
        in>>a[i];
    build_rmq();
    for(int i=0;i<n;i++){
    for(int j=0;(1<<j)<n;j++)
    out<<rmq[i][j]<<" ";
    out<<endl;
    }
    for(int j=1;j<=m;j++){
        int st,dr;
        in>>st>>dr;
        out<<interogare(st-1,dr-1)<<" ";
    }
    return 0;
}