90分求调,1RE
  • 板块P1816 忠诚
  • 楼主e_zhe
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/14 17:37
  • 上次更新2024/3/14 20:19:16
查看原帖
90分求调,1RE
1071849
e_zhe楼主2024/3/14 17:37
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n;int m;
int a;int b;
int num[N];
vector<int>vec;
struct Node{int l,r,val;}tr[4*N];
void build(int c,int l,int r){
	tr[c].l=l;tr[c].r=r;
	if(l>=r){
		tr[c].val=num[l];
		return;
	}
	int mid=(l+r)/2;
	build(c*2,l,mid);
	build(c*2+1,mid+1,r);
	tr[c].val=min(tr[c*2].val,tr[c*2+1].val);
	return;
}
int query(int c,int x,int y){
	if(tr[c].l==x&&tr[c].r==y){
		return tr[c].val;
	}
	int mid=(tr[c].l+tr[c].r)/2;
	if(y<=mid){return query(c*2,x,y);}
	if(x>mid){return query(c*2+1,x,y);}
	int ql=query(c*2,x,mid);
	int qr=query(c*2+1,mid+1,y);
	return min(ql,qr);
}
int main(){
	scanf("%d%d",&m,&n);
	for(int i=1;i<=m;++i){scanf("%d",&num[i]);}
	build(1,1,n);
	while(n--){
		scanf("%d%d",&a,&b);
		vec.push_back(query(1,a,b));
	}
	for(int i:vec){printf("%d ",i);}
	return 0;
}
2024/3/14 17:37
加载中...