单调队列模板

 

#include<stdio.h>

struct Node{
	int val,index;
}que[100];

int main()
{
	int ans[100];
	int N,K,i,head,tail,x;
	scanf("%d %d",&N,&K);
	head=tail=0;//tail指向队尾元素的下一个位置
	for(i=0;i<N;i++){
		scanf("%d",&x);
		if(head<tail&&que[head].index<=i-K) head++;//如果队首的元素到队尾大于或等于K个,则T掉队首元素,因为当前元素一定要加入队列。
		while(head<tail&&que[tail-1].val>=x)//队首存放最小值。
			tail--;
		que[tail].val=x;
		que[tail++].index=i;
		ans[i]=que[head].val;
	}
	for(i=K-1;i<N;i++)
		printf("%d ",ans[i]);
	printf("\n");
	return 0;
}


 

你可能感兴趣的:(单调队列模板)