Cod sursa(job #1860194)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 27 ianuarie 2017 22:11:00
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.56 kb
#include <fstream>

using namespace std;

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

int sol[20][100005],n,m,i,j,log[100005],x,y,v,diff;

int main() {
    f >> n >> m;
    for (i = 2; i <= n+1; i++)
        f >> sol[0][i-1], log[i]=log[i/2]+1;
    for (i = 1; (1<<i)<=n;i++)
        for (j = 1; j + (1<<i)-1<=n;j++)
            sol[i][j] = min(sol[i-1][j], sol[i-1][j+(1<<(i-1))]);
    while (m--) {
        f >> x >> y;
        diff=(y-x+1);
        v = log[diff];
        g << min(sol[v][x], sol[v][x+diff-(1<<v)]) << '\n';
    }
    return 0;
}