Cod sursa(job #1301548)

Utilizator diana-t95FMI Tudoreanu Diana Elena diana-t95 Data 26 decembrie 2014 02:53:38
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
using namespace std;
#define maxn 100001
#define maxl 18
int rmq[maxl][maxn];
int lg[maxn], a[maxn];
int n, m;
int main()
{
    ifstream f("rmq.in");
    ofstream g("rmq.out");
    int i, j, x, y, l, rest, size, answer;
    f>>n>>m;
    lg[1]=0;
    for (i=2;i<=n;i++) lg[i]=lg[i/2]+1;
    for (i=1;i<=n;i++) f>>a[i];
    for (i=1;i<=n;i++) rmq[0][i]=a[i];
    for (i=1;i<=lg[n];i++)
        {
            l=(1<<i-1);
            for (j=1;j<=n-2*l+1;j++)
            rmq[i][j]=min(rmq[i-1][j], rmq[i-1][j+l]);
        }

    for (i=1;i<=m;i++)
    {
        f>>x>>y;
        size=y-x+1;
        l=lg[size];
        rest=size-(1<<l);
        answer=min(rmq[l][x], rmq[l][x+rest]);
        g<<answer<<'\n';
    }

}