单调队列的题目。
注意用c++提交,否则容易超时
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1e6+9;
struct
{
int data,id;
}que[maxn];
int a[maxn];
int n,k;
void work(int tmp)
{
int st=1,ed=0;
for(int i=1;i<k;i++)
{
while(ed>=st&&que[ed].data*tmp>=a[i]*tmp) ed--;
que[++ed].data=a[i];
que[ed].id=i;
}
for(int i=k;i<=n;i++)
{
while(ed>=st&&que[ed].data*tmp>=a[i]*tmp) ed--;
que[++ed].data=a[i];
que[ed].id=i;
while(i-que[st].id>=k) st++;
printf("%d ",que[st].data);
}
printf("\n");
}
int main()
{
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
work(1);
work(-1);
return 0;
}
本文介绍了一种使用C++编程语言解决特定问题的方法,通过实现单调队列来优化算法性能,避免了可能的超时风险。详细阐述了算法设计思路和关键步骤,包括队列结构定义、工作函数实现以及输入输出处理。
201

被折叠的 条评论
为什么被折叠?



