无输出求调
查看原帖
无输出求调
547609
QZY2008楼主2021/9/26 23:20
#include <bits/stdc++.h>
const int N=2e6+1;
struct Node{
	int val;
	int l,r;
};
int n,m;
Node tree[N<<2+1];
inline void in(int &x){
	x=0;int f=1;
	char ch=getchar();
	while ((ch<'9'||ch>'0')&&ch!='-')
		ch=getchar();
	if (ch=='-')
		f=-1;
	while (ch<='9'&&ch>='0')
		x=x*10+ch-'0',ch=getchar();
	x*=f;
	return;
}
#define lson value<<1
#define rson value<<1|1
inline int min(int a,int b){
	return a>b?b:a;
}
inline void Pushup(int value){
	tree[value].val=min(tree[lson].val,tree[rson].val);
}
int num[N];
inline void Build(int value,int l,int r){
	if (l>r)return;
	if (l==r){
		tree[value].l=l;tree[value].r=r;
		tree[value].val=num[l+r>>1];
		return;
	}
	int mid=l+r>>1;
	Build(l,lson,mid);Build(rson,mid+1,r);
	tree[value].l=l;tree[value].r=r;
	Pushup(value);
}
int L,R;
const int inf=INT_MAX;
inline int Query(int value,int l,int r){
	if (l>r)return 0;
	if (L<=l&&R>=r)
		return tree[value].val;
	int mid=l+r>>1;
	int mn=inf;
	if (L<=mid)
		mn=min(mn,Query(l,mid,lson));
	if (R>mid)
		mn=min(mn,Query(mid+1,r,rson));
	return mn;
}
int main(){
	in(n);in(m);
	for (int i=1;i<=n;i++)	
		in(num[i]);
	Build(1,1,n);
	for (int i=1;i<=n;i++){
		L=i-m;R=i-1;
		if(L<=0)L=1;
		if (L>R){
			putchar('0');
			puts("");
			continue;
		}
		printf("%d\n",Query(1,n,1));
	}
} 
2021/9/26 23:20
加载中...