Cod sursa(job #2754066)

Utilizator Virgil993Virgil Turcu Virgil993 Data 24 mai 2021 23:04:55
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;

int RMQ[100][100001],v[100001],lg[100001];

int main()
{
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    int i,j,n,m, prim, sec,z,d,log;
    fin >> n >> m;
    for( i = 1; i <= n; i++)
        fin>> v[i];

    for(i = 1; i <= n; i++)
        RMQ[0][i] = v[i];
    for( i = 1; pow(2,i) <= n; i++)
        for ( j = 1; j+pow(2,i)-1<=n; j++)
            RMQ[i][j] = min(RMQ[i - 1][j], RMQ[i - 1][j + (1<<(i-1))]);

    lg[1] = 0;
    for(i=2; i <= n; i++)
        lg[i] = lg[ i/2] + 1;
    for (i = 0; i < m; i++)
    {
        fin>> prim >> sec;
        z = sec - prim + 1;
        log = lg[z];
        d = z - (pow(2,log));
        fout<< min( RMQ[log][prim],RMQ[log][prim+d])<<'\n';
    }
    return 0;

}