Cod sursa(job #1290643)

Utilizator alex_bucevschiBucevschi Alexandru alex_bucevschi Data 11 decembrie 2014 17:15:24
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <bits/stdc++.h>

using namespace std;
int rmq[18][100010],n,m,i,lg,x,y,a[100010],lvl,l,r;
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",&rmq[0][i]);
    for(lg=1,lvl=1;lg<=n;lg<<=1,lvl++)
        for(l=1,r=(lg<<1);r<=n;r++,l++)
            rmq[lvl][l]=min(rmq[lvl-1][l],rmq[lvl-1][l+lg]);
    for(i=2;i<=n;i<<=1)a[i]=1;
    for(i=1;i<=n;i++)a[i]+=a[i-1];
    for(;m;m--)
    {
        scanf("%d%d",&x,&y);
        lg=y-x+1;
        lvl=a[lg];
        printf("%d\n",min(rmq[lvl][x],rmq[lvl][y-(1<<lvl)+1]));
    }
    return 0;
}