Cod sursa(job #3003056)

Utilizator CobzaruAntonioCobzaru Paul-Antonio CobzaruAntonio Data 15 martie 2023 13:35:36
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>

using namespace std;
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int rmq[20][100005];
int n;
int m;
int lg[100005];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m;
    for (int i=2;i<=n;i++)
        lg[i] = lg[i/2] + 1;
    for (int i=1;i<=n;i++)
        cin >> rmq[0][i];
    for (int i=1;(1<<i)<=n;i++)
        for (int j=1;j+(1<<i)-1<=n;j++)
            rmq[i][j] = min(rmq[i-1][j],rmq[i-1][j + (1<<(i-1))]);
    for (int q=1;q<=m;q++)
    {
        int x,y;
        cin >> x >> y;
        if (x>y)
            swap(x,y);
        int d = y - x + 1;
        int j = lg[d];
        cout << min(rmq[j][x],rmq[j][y - (1<<j) + 1]) << '\n';
    }
    return 0;
}