Cod sursa(job #1805499)

Utilizator doruliqueDoru MODRISAN dorulique Data 13 noiembrie 2016 21:58:36
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <cstdio>

#define min(a,b) (a<b?a:b)

int a[100010][20];

int main()
{
    FILE *f=fopen("rmq.in","r"),*g=fopen("rmq.out","w");
    int n,m,i,j,p,x,y;
    fscanf(f,"%d%d",&n,&m);
    for(j=1;j<=n;j++)fscanf(f,"%d",&a[0][j]);
    p=2;i=1;
    while(p<=n)
    {
        for(j=1;j+p-1<=n;j++)
            a[i][j]=min(a[i-1][j],a[i-1][j+(p>>1)]);
        i++;p=(p<<1);
    }
    while(m)
    {
        m--;
        fscanf(f,"%d%d",&x,&y);
        int l=y-x+1;
        p=1,i=0;
        while(p<=l){p=(p<<1);i++;}
        p/=2;i--;
        fprintf(g,"%d\n",min(a[i][x],a[i][y-p+1]));
    }
    return 0;
}