Cod sursa(job #3145029)

Utilizator AdiFBubuBubuianu Adrian AdiFBubu Data 12 august 2023 02:35:03
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>

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

int N, M, x, y;
int A[100010], P[100010][19];
int lg[100010];

void process2()
{
    for(int i = 0; i < N; i ++)
        P[i][0] = i;
    for(int j = 1; (1 << j) <= N; j ++)
        for(int i = 0; i + (1 << j) - 1 <= N - 1; i ++)
            if( A[ P[i][j - 1] ] < A[ P[i + (1 << (j - 1) )][j - 1] ])
                P[i][j] = P[i][j - 1];
            else
                P[i][j] = P[i + (1 << (j - 1) )][j - 1];
}

int main()
{
    f >> N >> M;
    for(int i = 0; i < N; i ++)
        f >> A[i];

    lg[1] = 0;
    for(int i = 2 ; i <= N; i ++)
        lg[i] = lg[i / 2] + 1;

    process2();

    for(int i = 1; i <= M; i ++)
    {
        f >> x >> y;
        x --, y --;
        int k = lg[y - x + 1];
        g << min( A[ P[x][k] ], A[ P[y - (1 << k) + 1][k] ] ) << '\n';
    }

    return 0;
}