Cod sursa(job #1887671)

Utilizator cyber_ghSoltan Gheorghe cyber_gh Data 21 februarie 2017 18:33:54
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.53 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int N,A[100001][50],M;

int main(){
	fin >>N>>M;
	for (int i=0;i<N;i++){
		fin >>A[i][0];
	}
	for (int j=1;(1<<j)<=N;j++){
		for (int i=0;i+(1<<j)-1<N;i++){
			A[i][j]=min(A[i][j-1],A[i+(1<<(j-1))][j-1]);
			
		}
	}
	
	for (int i=1;i<=M;i++){
		int x,y;
		fin >>x>>y;
		x--;
		y--;
		int l=y-x+1;
		int k=int(log(l));
		if (!A[x+k][l-(1<<k)]) A[x+k][l-(1<<k)]=1e9;
		fout <<min(A[x][k],A[x+k][l-(1<<k)])<<"\n";
		
		
		
		
	}
	
	
	
	return 0;
}