Cod sursa(job #2220926)

Utilizator Anastasia11Susciuc Anastasia Anastasia11 Data 12 iulie 2018 20:40:37
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#define Nmax 100005

using namespace std;

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

int n, Q;
int rmq[18][Nmax], log2[Nmax];
int x, y;

int query(int x, int y)
{
    int diff = y - x + 1;
    int i = log2[diff];
    int a = rmq[i][x];
    int b = rmq[i][y-(1<<i)+1];
    return min(a, b);

}

int main()
{
    f >> n >> Q;
    for ( int i = 1; i <= n; i ++ )
    f >> rmq[0][i];
    for ( int i = 2; i <= n; i ++ )
    log2[i]=log2[i/2]+1;
    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);
          }

    while(Q--)
    {
        f >> x >> y;
        g << query(x, y) << '\n';
    }

}