Cod sursa(job #3242148)

Utilizator CondoracheAlexandruCondorache Alexandru CondoracheAlexandru Data 9 septembrie 2024 15:29:50
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define F first
#define S second
#define endl '\n'
#define all(a) (a).begin(),(a).end()
using namespace std;
const ll maxn=2*1e5+5;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

vector<vector<ll>>adj(maxn,vector<ll>());
 vector<ll>segt(4*maxn),a(maxn);
 void build(ll node,ll l, ll r){
 	if(l==r) segt[node]=a[l];
 	else{
 		ll mid=(l+r)/2;
		build(2*node,l,mid);
		build(2*node+1,mid+1,r);
		segt[node]=min(segt[2*node],segt[2*node+1]);
	}
 }
 ll query(ll node,ll st,ll dr,ll l,ll r){
 	// interogare pentru un interval fara lazy
 	if(st>=l && dr<=r) return segt[node];
 	ll mid=(st+dr)/2;
 	ll left=1e9,right=1e9;
 	if(l<=mid) left=query(2*node,st,mid,l,r);
 	if(r>mid) right=query(2*node+1,mid+1,dr,l,r);
 	return min(left,right);
 }
 int main(){
 	ll n,q;
	fin >> n >> q;
	for(ll i=1;i<=n;i++){
		fin >> a[i];
	} 
	build(1,1,n);
	while(q--){
		ll a,b;
		fin >> a >> b;
//		cout << "ans=";
		fout << query(1,1,n,a,b) << endl;
	}
 	return 0;
}