Cod sursa(job #1245712)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 19 octombrie 2014 21:04:12
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int a[100005];
int d[100005][20];
int n;

void process()
{
	for(int i=0;i<n;i++)
		d[i][0]=a[i];
	for(int j=1;(1<<j)<=n;j++)
		for(int i=0;i+(1<<j)<=n;i++)
			d[i][j]=min(d[i][ j-1 ], d[i+(1<<(j-1))][ j-1 ]);
}
int  querry( int x, int y )
{
    int lg= y-x+1;
    int pw=0;
    while((1<<pw)<=lg)pw++;
    pw--;
    return min(d[x-1][pw], d[y-(1<<pw)][pw]);
}

int main()
{
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    int m;
    scanf("%d%d", &n, &m);
    for(int i=0;i<n;i++)
		scanf("%d", &a[i]);
	process();
	for(int i=0;i<m;i++)
	{
		int x, y;
		scanf("%d%d", &x, &y);
		printf("%d\n", querry(x, y));
	}
    return 0;
}