Cod sursa(job #2460928)

Utilizator sebastianp2003Popa Sebastian sebastianp2003 Data 24 septembrie 2019 18:20:08
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, k;
int main()
{
    f >> n >> k;
    vector<vector<int>> ma(n, vector<int>(log2(n) + 1, 0));
    vector<int> v(n);
    for (int i = 0; i < n; i++)
        f >> v[i], ma[i][0] = i;
    for (int j = 1; (1 << j) <= n; j++)
        for (int i = 0; i + (1 << j) <= n; i++)
            ma[i][j] = (v[ma[i][j - 1]] < v[ma[i + (1 << (j - 1))][j - 1]] ? ma[i][j - 1] : ma[i + (1 << (j - 1))][j - 1]);
    for (int x, y; k; k--)
    {
        f >> x >> y;
        x--, y--;
        int ax = int(log2(y - x + 1));
        g << min(v[ma[x][ax]], v[ma[y - (1 << ax) + 1][ax]]) << '\n';
    }
    return 0;
}