Cod sursa(job #2275265)

Utilizator anamaria41Raicu Ana anamaria41 Data 2 noiembrie 2018 22:50:12
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,x,y,a[100050], r[20][100050];
int lg[100050],k,i,j,l,dif;
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]);
		r[0][i] = a[i];

	}



	for(i=1; (1<<i)<=n;i++)
	    for (j=1; j<=n-(1<<i)+1; j++)
	    {
		    k =(1<<(i-1));
			r[i][j]=min(r[i-1][j], r[i-1][j+k]);
	    }

		lg[1]=0;
	for (i=2; i<=n; i++)
		lg[i]=lg[i/2]+1;

	for (i=1; i<=m; i++)
	{
		scanf ("%d%d", &x, &y );
		dif=y-x+1;
		k=lg[dif];
		printf("%d\n", min(r[k][x], r[k][y-(1<<k)+1]));

	}


    return 0;
}