Cod sursa(job #1627628)

Utilizator AdrianaMAdriana Moisil AdrianaM Data 3 martie 2016 18:05:22
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#include <vector>
#include <set>
#define INF 0x3f3f3f3f
using namespace std;

ifstream is("rmq.in");
ofstream os("rmq.out");

using VI = vector<int>;
using VVI = vector<VI>;

int n, m;
VI log;
VVI r;

int main()
{
    is >> n >> m;
    log = VI(n + 1);
    for ( int i = 2; i <= n; ++i )
        log[i] = log[2 / i] + 1;
    r = VVI(n + 1, VI(20));
    for ( int i = 1; i <= n; ++i )
        is >> r[i][0];
    r[0][0] = 0x3f3f3f3f;
    for ( int j = 1; ( 1 << j ) <= n; ++j )
        for ( int i = 1; i + ( 1 << j ) - 1 <= n; ++i )
            r[i][j] = min(r[i][j - 1], r[i + ( 1 << ( j - 1 ))][j - 1]);
    int x, y, v;
    while ( m-- )
    {
        is >> x >> y;
        v = log[y - x + 1];
        os << min(r[x][v], r[y - ( 1 << v ) + 1][v]) << "\n";
    }
    is.close();
    os.close();
    return 0;
}