线段树求调
查看原帖
线段树求调
797897
_QyGyQ_楼主2024/1/9 13:59

RE on#2,9,10 WA on#3,7

#include<bits/stdc++.h>
#define lc(p) (p<<1)
#define rc(p) (p<<1|1)
using namespace std;
using ll=long long;
const int N=1e6+7;
int a[N];
struct node{
	int mi,ma;
}tree[N];
void push_up(int p){
	tree[p].mi=min(tree[lc(p)].mi,tree[rc(p)].mi);
	tree[p].ma=max(tree[lc(p)].ma,tree[rc(p)].ma);
}
void build(int p,int pl,int pr){
	if(pl==pr){
		tree[p].mi=tree[p].ma=a[pl];
		return ;
	}
	int mid=pl+pr>>1;
	build(lc(p),pl,mid);
	build(rc(p),mid+1,pr);
	push_up(p);
}
int query_mi(int L,int R,int p,int pl,int pr){
	if(L<=pl&&pr<=R){
		return tree[p].mi;
	}
	int res=1e9;
	int mid=pl+pr>>1;
	if(L<=mid) res=min(res,query_mi(L,R,lc(p),pl,mid));
	if(R>mid) res=min(res,query_mi(L,R,rc(p),mid+1,pr));
	return res;
}
int query_ma(int L,int R,int p,int pl,int pr){
	if(L<=pl&&pr<=R){
		return tree[p].ma;
	}
	int res=0;
	int mid=pl+pr>>1;
	if(L<=mid) res=max(res,query_ma(L,R,lc(p),pl,mid));
	if(R>mid) res=max(res,query_ma(L,R,rc(p),mid+1,pr));
	return res;
}
int main(){
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	build(1,1,n);
	for(int i=1,j=k;j<=n;i++,j++){
		cout<<query_mi(i,j,1,1,n)<<" ";
	}
	puts("");
	for(int i=1,j=k;j<=n;i++,j++){
		cout<<query_ma(i,j,1,1,n)<<" ";
	}
	return 0;
}
2024/1/9 13:59
加载中...