Cod sursa(job #1822890)

Utilizator PaterucAPetruc Andrei Stefan PaterucA Data 5 decembrie 2016 18:43:05
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <fstream>

using namespace std;

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

const int N=(1<<17);
int r[17][N], p[N], n, m, i, j, x, y, k;

int main()
{
    f>>n>>m;

    for(i=1; i<=n; i++)
        f>>r[0][i];

    for(i=1, x=1, y=2; y<=n; i++, x<<=1, y<<=1)
        for(j=1, k=y; k<=n; j++, k++)
            r[i][j]=min(r[i-1][j], r[i-1][j+x]);

    for(i=2; i<=n; i<<=1)
        p[i]=1;
    for(i=1; i<=n; i++)
        p[i]+=p[i-1];

    for(;m;m--)
    {
        f>>x>>y;
        i=p[y-x+1];
        j=1<<i;
        g<<min(r[i][x], r[i][y-j+1])<<'\n';
    }

    return 0;
}