Cod sursa(job #966716)

Utilizator dropsdrop source drops Data 26 iunie 2013 15:14:07
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <queue>
#include <deque>
#include <list>
#include <ctime>
#include <string>
#include <algorithm>
using namespace std;
ifstream ff("rmq.in");
ofstream gg("rmq.out");

#define max 100001
int n, m, rr[max][18];

void rmq(){
	for(int j=1;(1<<j)<=n;j++)
	for(int i=1;i+(1<<(j-1))<=n;i++)
		rr[i][j]=min(rr[i][j-1], rr[i+(1<<(j-1))][j-1]);
}

int main(){
	int x, y, k;
	ff >> n >> m;
	for(int i=1;i<=n;i++) ff >> rr[i][0];
	rmq();
	for(int i=1;i<=m;i++){
		ff >> x >> y;
		k=log(y-x+1)/log(2);
		gg << min(rr[x][k], rr[y-(1<<k)+1][k]) << "\n";
		
	}
	return 0;
}