Cod sursa(job #2369853)

Utilizator Anastasia11Susciuc Anastasia Anastasia11 Data 6 martie 2019 09:31:52
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>
#define Nmax 100005

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int n, Q;
int rmq[20][Nmax];
int log2[Nmax];

int query(int x, int y)
{
    if(x > y) swap(x, y);
    int i=log2[y-x+1];
    return min(rmq[i][x], rmq[i][y-(1<<i)+1]);
}

int main()
{
    f >> n >> Q;
    for (int i = 1; i <= n; i++) f >> rmq[0][i];

    for (int i = 1; (1<<i) <= n; i++)
        for (int j = 1; j+(1<<i)-1 <= n; j++)
        {
            int x=rmq[i-1][j];
            int y=rmq[i-1][j+(1<<(i-1))];
            rmq[i][j]=min(x, y);
        }

    /*for (int i = 0; (1<<i) <= n; i++)
    {
        for (int j = 1; j+(1<<i) <= n; j++)
            g << rmq[i][j] << " ";
        g << '\n';
    }*/

    for (int i = 2; i <= n; i++)
        log2[i]=log2[i/2]+1;
   // g << '\n';
    while(Q--)
    {
        int x, y;
        f >> x >> y;
        g << query(x, y) << '\n';
    }

    return 0;
}