Cod sursa(job #339278)

Utilizator RobybrasovRobert Hangu Robybrasov Data 9 august 2009 10:58:55
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <cstdio>
#define N 100001

int A[N][17];

int main()
{
    int n,m,log,i,j;
	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][0]);

    //preprocesare
	for (log=1; 1<<log <= n; log++)
        for (j=1; j<=n-(1<<log)+1; j++)
            if (A[j][log-1] < A[j+(1<<(log-1))][log-1]) A[j][log]=A[j][log-1];
            else A[j][log]=A[j+(1<<(log-1))][log-1];

    //query-uri
    while (m--)
    {
        scanf("%d%d",&i,&j);
        for (log=0; 1<<(log+1) <= (j-i+1); log++);
            if (A[i][log]<A[j-(1<<log)+1][log]) printf("%d\n",A[i][log]);
            else printf("%d\n",A[j-(1<<log)+1][log]);
    }

    return 0;
}