Cod sursa(job #3250383)

Utilizator AllerAller Aller Aller Data 20 octombrie 2024 15:44:59
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int dim=100001;
int rmq[dim][21], lg[dim];

int query(int st, int dr){
    int len=lg[dr-st+1];
    return min(rmq[dr][len], rmq[st+(1<<len)-1][len]);
}

int main()
{
    int n, x, i, j, k, v[dim];
    f>> n >> x;
    for(i=1; i<=n; i++){
        f>> v[i]; rmq[i][0]=v[i];
    }
    for(i=2; i<=n; i++){
        lg[i]=1+lg[i/2];
    }
    for(k=1; k<=17; k++){
        for(i=1; i<=n; i++){
            rmq[i][k]=min(rmq[i][k-1], rmq[max(1, i-(1<<(k-1)))][k-1]);
        }
    }
    for(k=1; k<=x; k++){
        f>> i >> j;
        g<< query(i, j) << endl;
    }

    return 0;
}