90分求调
  • 板块P1816 忠诚
  • 楼主liumuxian
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/2/5 13:09
  • 上次更新2025/2/5 16:41:36
查看原帖
90分求调
922644
liumuxian楼主2025/2/5 13:09
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N=1e7+10;
int a[N],k;
struct node{
	int ll,rr,num;
}s[N];
void f(int l,int r){
	int ans=1e9+7;
	for(int i=1;i<=k;i++){
		if(s[i].ll>=l&&s[i].rr<=r) ans=min(ans,s[i].num); 
	}
	cout<<ans<<" ";
}
int init(int newl,int newr,int id){
	k=max(k,id);
	if(newl==newr){
		s[id].num=a[newl];
		s[id].ll=newl;
		s[id].rr=newr;
		return a[newl];
	}
	int mid=newl+newr>>1;
	int p=init(newl,mid,id*2);
	int q=init(mid+1,newr,id*2+1);
	s[id].num=min(p,q);
	s[id].ll=newl;
	s[id].rr=newr;
	return min(p,q);
}
signed main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int n,T;
	cin>>n>>T;
	for(int i=1;i<=n;i++) cin>>a[i];
	init(1,n,1);
	while(T--){
		int l,r;
		cin>>l>>r;
		f(l,r);
	}
	return 0;
}
2025/2/5 13:09
加载中...