Cod sursa(job #2243276)

Utilizator lixiLixandru Andrei lixi Data 20 septembrie 2018 11:15:47
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <iostream>
#include<fstream>
#include<cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int N, M, m[100001][17];
int main()
{
    int x, y;
    f >> N >> M;
    for(int i = 1; i <= N; i++)
        f >> m[i][0];
    for(int j = 1; 1 << j <= N; j++)
    {
        int z = 1 << j;
        for(int i = 1; i + z - 1 <= N; i++)
            if(m[i][j - 1] < m[i + z / 2][j - 1])
                m[i][j] = m[i][j - 1];
            else
                m[i][j] = m[i + z / 2][j - 1];
    }
    //cout<<log2(100000);
    for(int i = 0; i < M; i++)
    {
        f >> x >> y;
        int t = log2(y - x + 1);
        g << min(m[x][t], m[y - (1 << t) + 1][t]) << '\n';
    }
    return 0;
}