poj2823 优先队列

来源:互联网 发布:easyui 表单插件js 编辑:程序博客网 时间:2024/05/22 03:10
简单优先队列
#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <cmath>#include <vector>using namespace std;#define maxn 1100000int q[maxn],h,t;int n,m,k,save[maxn],num[maxn];vector<int>ans;void great(){    h=1;    t=0;    for(int i=1;i<k;i++)    {        while(h<=t&&q[t]<=save[i]) t--;        t++;        q[t]=save[i];num[t]=i;    }    for(int i=k;i<=n;i++)    {        while(h<=t&&q[t]<=save[i]) t--;        t++;        q[t]=save[i];num[t]=i;        while(num[h]<=i-k)h++;        printf("%d ",q[h]);    }}void small(){    h=1;    t=0;    for(int i=1;i<k;i++)    {        while(h<=t&&q[t]>=save[i]) t--;        t++;        q[t]=save[i];num[t]=i;    }    for(int i=k;i<=n;i++)    {       while(h<=t&&q[t]>=save[i]) t--;        t++;        q[t]=save[i];num[t]=i;        while(num[h]<=i-k)h++;        printf("%d ",q[h]);    }}int main(){    scanf("%d%d",&n,&k);    {        for(int i=1;i<=n;i++)        {            scanf("%d",&save[i]);        }       small();       printf("\n");       great();    }    return 0;}

0 0
原创粉丝点击