Cod sursa(job #2687333)

Utilizator Xutzu358Ignat Alex Xutzu358 Data 19 decembrie 2020 20:31:50
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int rmq[18][100005];
int n;
int m;
int x,y;
int pwr[20];

void create_powers() {
    pwr[0]=1;
    for (int i=1;i<=18;i++) {
        pwr[i]=2*pwr[i-1];
    }
}

int main()
{
    create_powers();
    f >> n >> m;
    for (int i=1;i<=n;i++) {
        f >> rmq[0][i];
    }
    for (int i=1;i<=17;i++) {
        for (int j=1;j<=n;j++) {
            rmq[i][j] = min(rmq[i-1][j] , rmq[i-1][j+pwr[i-1]]);
        }
    }
    for (int k=1;k<=m;k++) {
        f >> x >> y;
        for (int i=17;i>=0;i--) {
            if (y-x+1>=pwr[i]) {
                g << min(rmq[i][x],rmq[i][y-pwr[i]+1]) << '\n';
                break;
            }
        }
    }
    return 0;
}