Cod sursa(job #1811204)

Utilizator aelinAnisoara aelin Data 20 noiembrie 2016 22:14:44
Problema Range minimum query Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>
using namespace std;

int ind, val, arb[400100], l, r, n, m, b;

void update(int st, int dr, int pos){
	if (st==dr){
		arb[pos]= val;
		return;
	}
	int mid = (st+dr)/2;
	if (ind <= mid) update(st, mid, pos*2); 
	else update(mid+1, dr, pos*2 +1);
	arb[pos]=min(arb[pos*2], arb[pos*2 +1]);
}

int cer(int st, int dr, int pos){
	if (l<=st && dr<=r) return arb[pos];
	int a=100000, b=100000, mid= (st+dr)/2;
	if (l<=mid) a= cer(st, mid, 2*pos);
	if (r> mid) b= cer(mid+1, dr, 2*pos +1);
	return min(a, b);
}

int main(){
	ifstream cin("rmq.in");
	ofstream cout("rmq.out");
	
	cin>>n>>m;
	
	for (ind=1; ind<=n; ind++){
		cin>>val;
		update(1, n, 1);
	}
	for (int i=0; i<m; i++){
		cin>>l>>r;
		cout<<cer(1, n, 1)<<'\n';	
	}
	return 0;
}