Cod sursa(job #3328173)

Utilizator StefantimStefan Timisescu Stefantim Data 6 decembrie 2025 17:14:51
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#include <algorithm>

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

const int NMAX = 1e5;
int dp[NMAX+5][20], lg[NMAX+5];
int main()
{
    int n, m, x, y, result, t;
    fin >> n >> m;

    for(int i = 1; i <= n; ++i)
        lg[i] = lg[i/2] + 1;
    for(int i = 1; i <= n; ++i)
        fin >> dp[i][0];

    for(int k = 1, power = 2; power <= n; power<<=1, k++)
        for(int i = 1; i + power - 1 <= n; ++i)
            dp[i][k] = min(dp[i][k-1], dp[i + power/2][k-1]);
    
    for(int i = 1; i <= m; ++i)
    {
        fin >> x >> y;
        t = lg[y - x + 1] - 1;
        result = min(dp[x][t], dp[y + 1 - (1 << t)][t]);
        fout << result << "\n";
    }
    return 0;
}