Cod sursa(job #2754737)

Utilizator alina225Avram Miruna alina225 Data 26 mai 2021 14:02:33
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;

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

int N, M, ST[100000][18], A[100000];

int main() {
    std::ios::sync_with_stdio(false);
    f >> N >> M;
    for (int i = 0; i < N; i++) {
        ST[i][0] = i;
        f >> A[i];
    }

    for (int j = 1; (1 << j) <= N; j++) {
        for (int i = 0; i + (1 << j) - 1 < N; i++)
            ST[i][j] = (A[ST[i][j - 1]] < A[ST[i + (1 << (j - 1))][j - 1]]) ?
                       ST[i][j - 1] : ST[i + (1 << (j - 1))][j - 1];
    }

    /**for(int j=0;(1<<j)<=N;j++)
    {
        for(int i=0;i+(1<<j)-1<N;i++)
            cout<<ST[i][j]<<' ';
        cout<<'\n';
    }*/

    for (int i, j; f >> i >> j;) {
        i--, j--;
        int k = log2(j - i + 1);
        g << min(A[ST[i][k]], A[ST[j - (1 << k) + 1][k]]) << '\n';
    }
    return 0;
}