Cod sursa(job #2657116)

Utilizator TheGodFather2131Alexandru Miclea TheGodFather2131 Data 9 octombrie 2020 17:43:17
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
//ALEXANDRU MICLEA

#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
#include <chrono>

using namespace std;

//#include <iostream>
#include <fstream>
//ifstream fin("input.in"); ofstream fout("output.out");
ifstream fin("rmq.in"); ofstream fout("rmq.out");

//VARIABLES

int v[100005];
int dp[100005][20];
int p2[20];

//FUNCTIONS



//MAIN
int main() {

    p2[0] = 1;
    for (int i = 1; i <= 20; i++) {
        p2[i] = p2[i - 1] * 2;
    }

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

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

    for (int i = 1; i <= n; i++) {
        dp[i][0] = v[i];
    }

    for (int i = n; i >= 1; i--) {
        for (int j = 1; p2[j] <= n - i; j++) {
            dp[i][j] = min(dp[i][j - 1], dp[i + p2[j - 1]][j - 1]);
        }
    }

    for (int i = 1; i <= m; i++) {
        int a, b;
        fin >> a >> b;

        int d = b - a + 1;
        int l = (int)log2(d);
        fout << min(dp[a][l], dp[b - p2[l] + 1][l]) << '\n';

    }

    return 0;
}