Cod sursa(job #2467678)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 4 octombrie 2019 20:00:19
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

const int NMAX = 100000;

long long p[NMAX+5];
int rmq[20][NMAX+5];

void precalc_put()
{
    p[0]=p[1]=0;
    for(int i=2;i<=NMAX;i++) p[i]=p[i/2]+1;
}

int main()
{
    precalc_put();
    int n,m,x,y;
    fin >> n >> m;
    for(int i=1;i<=n;i++){
        fin >> x;
        rmq[0][i]=x;
    }
    for(int k=1;k<=20;k++)
        for(int i=1;i<=n-(1<<k)+1;i++)
            rmq[k][i]=min(rmq[k-1][i],rmq[k-1][i+(1<<(k-1))]);
    for(int i=1;i<=m;i++){
        fin >> x >> y;
        int p2=p[y-x+1];
        fout << min(rmq[p2][x],rmq[p2][y-(1<<p2)+1]) << '\n';
    }
    return 0;
}