Cod sursa(job #1670594)

Utilizator andrew_assassin789Andrei Manea andrew_assassin789 Data 31 martie 2016 21:08:38
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#define w 100005
using namespace std;
unsigned int v[w],log2[w];
unsigned int rmq[18][18];
int main()
{
    ifstream f("rmq.in");
    ofstream g("rmq.out");
    unsigned int i,n,m,j,x,y;
    f>>n>>m;
    for (i=1;i<=n;i++)
    {
        f>>v[i];
        rmq[0][i]=v[i];
    }
    log2[1]=0;
    for (i=2;i<=n;i++)
    {
        log2[i]=log2[i/2]+1;
    }
    long long l,diff,rmas;
    for (i=1;i<=log2[n];i++)
    {
        l=1<<(i-1);
        for (j=1;j<=n-(1<<i)+1;j++)
        {
            rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+l]);
        }
    }
    for (i=1;i<=m;i++)
    {
        f>>x>>y;
        diff=y-x+1;
        l=log2[diff];
        rmas=diff-(1<<l);
        g<<min(rmq[l][x],rmq[l][x+rmas])<<'\n';
    }
    f.close();
    g.close();
    return 0;
}