Cod sursa(job #1888704)

Utilizator AlexVulpoiuAlexandru Vulpoiu AlexVulpoiu Data 22 februarie 2017 12:00:50
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,i,j,k,p,x,y,lg,cate,a[100001],b[20][100001];
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",&a[i]);
        b[1][i]=a[i];
    }
    lg=2;
    for(i=2;i<20;i++)
    {
        for(j=1;j<=n;j++)
            b[i][j]=min(b[i-1][j],b[i-1][j+lg/2]);
        lg*=2;
    }
    /*for(i=1;i<20;i++,printf("\n"))
        for(j=1;j<=n;j++)
            printf("%d ",b[i][j]);*/
    while(m)
    {
        scanf("%d%d",&x,&y);
        cate=y+1-x;
        p=0;
        k=1;
        while(k<=cate)
        {
            p++;
            k*=2;
        }
        //if(k>cate)
        k/=2;
        printf("%d\n",min(b[p][x],b[p][y-k+1]));
        m--;
    }
    return 0;
}