100pts Subtask#1 #1 WA 玄关求条
查看原帖
100pts Subtask#1 #1 WA 玄关求条
579655
kunkun12345678楼主2024/10/6 09:24

记录

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+20;
inline int read(){
	int f=1,r=0;char c=getchar();
	if(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
	while(isdigit(c)){r=r*10+c-'0';c=getchar();}
	return f*r;
}
int n,m;
struct node{
	int minn;
	int l,r;
}t[N*4+20];
int a[N];
inline int ls(int x){return x<<1;}
inline int rs(int x){return x<<1|1;}
void pushup(int u){
	t[u].minn=min(t[ls(u)].minn,t[rs(u)].minn);
}
void build(int u,int l,int r){
	t[u].l=l;
	t[u].r=r;
	if(l==r){
		t[u].minn=a[l];
		return;
	}
	int mid=l+r>>1;
	build(ls(u),l,mid);
	build(rs(u),mid+1,r);
	pushup(u);
}
int query(int u,int ql,int qr){
	if(ql<=t[u].l&&t[u].r<=qr) return t[u].minn;
	else if(t[u].r<ql||qr<t[u].l) return INT_MAX;
	// int mid=t[u].l+t[u].r>>1;
	// if(qr<=mid) return query(ls(u),ql,qr);//!!!
	// if(ql>mid) return query(rs(u),ql,qr);//!!!
	return min(query(ls(u),ql,qr),query(rs(u),ql,qr));//!!!
}
signed main(){
	n=read();m=read();
	for(int i=1;i<=n;i++) a[i]=read();
	build(1,1,n);
	int l,r;
	while(m--){
		l=read();r=read();
		printf("%d ",query(1,l,r));
	}
	return 0;
}
2024/10/6 09:24
加载中...