Cod sursa(job #1519174)

Utilizator sebinechitasebi nechita sebinechita Data 6 noiembrie 2015 22:34:05
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define MAX 100010

int n, m, i, j, log[MAX], x, y, dist;
int a[MAX][17];

int main()
{
    fin >> n >> m;
    for(i = 1 ; i <= n ; i++)
    {
        fin >> a[i][0];
    }
    for(j = 1 ; (1<<j) <= n ; j++)
    {
        for(i = 1 ; i + (1<<j) - 1 <= n ; i++)
        {
            a[i][j] = min(a[i][j - 1], a[i + (1 << (j - 1))][j - 1]);
        }
    }
    log[1] = 0;
    for(i = 2 ; i <= n ; i++)
        log[i] = log[i / 2] + 1;
    while(m--)
    {
        fin >> x >> y;
        if(x >= y)
        {
            swap(x, y);
        }
        dist = y - x + 1;
        fout << min(a[x][log[dist]], a[y - (1<<log[dist]) + 1][log[dist]]) << "\n";
    }
}