Cod sursa(job #2917434)

Utilizator tzancauraganuTzanca Uraganu tzancauraganu Data 4 august 2022 23:13:04
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 

int N, M;
int v[100010];
int dp[19][100010];
int logs[100010];

int main()
{
    ifstream f("rmq.in");
    ofstream g("rmq.out");
    
    f >> N >> M;
    logs[0] = 0;
    for (int i = 1; i <= N; i++) {
        f >> dp[0][i];
        logs[i] = 1 + logs[i/2];
    }
    
    for (int l = 2, k = 1; l <= N; l *= 2, k++) {
        for (int i = 1; i + l - 1 <= N; i++)
            dp[k][i] = min(dp[k-1][i], dp[k-1][i + l / 2]);
    }
    
    for (int i = 1; i <= M; i++) {
        int a, b;
        f >> a >> b;
        int l = logs[b - a + 1] - 1;
        g << min(dp[l][a], dp[l][b - (1 << l) + 1]) << '\n';
    }
    
    f.close();
    g.close();
 
    return 0;
}