Cod sursa(job #1145686)

Utilizator alex_bucevschiBucevschi Alexandru alex_bucevschi Data 18 martie 2014 13:07:06
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int n,q,m,i,St,Dr,Lg,lg,a[1<<17],x[18][1<<17];
int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    scanf("%d%d",&n,&q);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&x[0][i]);
    }
    for(Lg=2,lg=1,m=1;Lg<=n;Lg<<=1,lg<<=1,m++)
        for(St=1,Dr=Lg;Dr<=n;St++,Dr++)
            x[m][St]=min(x[m-1][St],x[m-1][St+lg]);
    for(i=2;i<=n;i<<=1)a[i]=1;
    for(i=1;i<=n;i++)a[i]+=a[i-1];
    for(;q;q--)
    {
        scanf("%d%d",&St,&Dr);
        Lg=Dr-St+1;i=a[Lg];
        lg=1<<i;
        printf("%d\n",min(x[i][St],x[i][Dr-lg+1]));
    }
    return 0;
}