Cod sursa(job #2754414)

Utilizator IPCristianIlie Cristian IPCristian Data 25 mai 2021 19:12:06
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>

using namespace std;

#define Max 100001

ifstream fin("rmq.in");
ofstream fout("rmq.out");

int V[Max],P2[Max];
int RMQ[17][Max];

int main()

{
    int n,m;
    fin>>n>>m;

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

    P2[1] = 0;

    for (int i=2;i<n;i++)
        P2[i] = P2[i/2] + 1;

    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))]);

    int x,y,l;

    for (int i=0;i<m;i++)
    {
        fin>>x>>y;
        l = P2[y-x+1];
        fout<<min(RMQ[l][x],RMQ[l][x+(y-x+1)-(1<<l)])<<"\n";
    }

    fin.close();
    fout.close();
    return 0;

}