Cod sursa(job #2889271)

Utilizator woodyinhoStoica Elias-Valeriu woodyinho Data 12 aprilie 2022 15:36:27
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <valarray>

using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, x, y;
int a[100002];
int rmq[20][100002];
void RMQ(){
    for(int i = 2;i<=n;i++)
        a[i] = a[i/2] + 1;
    for(int i = 1; (1<<i) <=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 main() {

    f>>n>>m;
    for(int i=1;i<=n;i++)
        f>>rmq[0][i];
    RMQ();
//    for(int i = 0;i<=n;i++)
//        cout<<a[i]<<" ";
//    cout<<endl;
//    for(int i = 0;i<=log(n) + 1;i++)
//    {
//        for(int j = 0;j<=n;j++)
//            cout<<rmq[i][j]<<" ";
//    cout<<endl;
//    }
    for(int i = 1;i<=m;i++)
    {
        f>>x>>y;
        int poz = a[y-x+1];
        g<<min(rmq[poz][x], rmq[poz][y- (1<<poz) + 1])<<"\n";
    }
    return 0;
}