Cod sursa(job #1225149)

Utilizator george_stelianChichirim George george_stelian Data 1 septembrie 2014 01:26:12
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int v[100010][22],aux[22],n,m,i,j,x,y;

int main()
{
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++) scanf("%d",&v[i][0]);
    for(i=0,j=1;i<=20;j<<=1,i++) aux[i]=j;
    for(i=1;aux[i]<=n;i++)
        for(j=1;j<=n-aux[i]+1;j++) v[j][i]=min(v[j][i-1],v[j+aux[i-1]][i-1]);
    for(;m;m--)
    {
        scanf("%d%d",&x,&y);
        for(i=1;aux[i]<=y-x+1;i++);
        i--;
        printf("%d\n",min(v[x][i],v[y-aux[i]+1][i]));
    }
    return 0;
}