Cod sursa(job #2427524)

Utilizator PrekzursilAndrei Visalon Prekzursil Data 31 mai 2019 23:09:05
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.55 kb
#include<bits/stdc++.h>
using namespace std;
int rmq[20][100010],n,m,r,lg[100010];
int main(){
	ifstream cin("rmq.in");
	ofstream cout("rmq.out");
	cin>>n>>m;
	for(int i=0;i<n;i++)cin>>rmq[0][i];
	lg[1]=0;
	for(int i=2;i<=n;i++){
		lg[i]=lg[i/2]+1;
	}
	for(int i=1;(1<<i)<=n;i++){
		for(int j=0;j<=n-(1<<i);j++){
			rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
		}
	}
	for(int p=1;p<=m;p++){
		int i,j;
		cin>>i>>j;
		i--; j--;
		int l=j-i+1;
		int k=lg[l];
		int r=min(rmq[k][i],rmq[k][j-(1<<k)+1]);
		cout<<r<<'\n';
	}
	return 0;
}