您的位置:首页 > 其它

poj 2823 Sliding Window dp

2013-04-30 22:18 381 查看
单调队列的题目。

注意用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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: