Cod sursa(job #2504979)

Utilizator Bogdan_BuzatuBuzatu Bogdan Mihai Bogdan_Buzatu Data 5 decembrie 2019 21:50:01
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,m,l[100005],a[40][100005],putere,test1,test2,dif,putt,logt;
int main(){
    fin>>n>>m;
    for(int i=2;i<=n;i++){
        l[i]=l[i/2]+1;

    }
    for(int i=1;i<=n;i++){
        fin>>a[0][i];

    }
    for(int i=1;i<=l[n]+1;i++){
        putere=(1<<i);
        for(int j=1;j<=n;j++){
            a[i][j]=a[i-1][j];
            if(putere/2+j<=n){
                a[i][j]=min(a[i][j],a[i-1][putere/2+j]);
            }
        }
    }
    for(int t=1;t<=m;t++){
        fin>>test1>>test2;
        dif=test2-test1+1;
        logt=l[dif];
        putt=(1<<logt);
        fout<<min(a[logt][test1],a[logt][test2-putt+1])<<"\n";
    }



}