POJ 2823

来源:互联网 发布:pc短信群发软件 编辑:程序博客网 时间:2024/06/08 17:25

题目链接:http://poj.org/problem?id=2823

—————————————————————————————————————

题目关键字:单调队列

—————————————————————————————————————

基本思路:队头删出窗的元素,队尾插入新的元素。且不如当前值的都在队尾被删掉。

—————————————————————————————————————

源代码:

#include<stdio.h>int n = 0,k = 0;int val[1000010];int que[1000010],h = 0,t = 0;int camp(int a,int b,int i){    if(i == 1)    {       if(a>b) return 0;       else    return 1;    }    else    {       if(a>b) return 1;       else    return 0;    }}void find(int p){    int l = 0, r = 0,m = 0;    int i = 0;    que[0] = 0;    h = 0;t = 0;    for(i = 1;i<=n;i++)    {       l = h;r = t;       if(h<t && i-que[h]+1>k) h++;       while(h<t && camp(val[i],val[que[t-1]],p))         t--;       que[t++] = i;       if(i>=k)        printf("%d ",val[que[h]]);    }    printf("\n");}int main(){    int i = 0;    scanf("%d%d",&n,&k);    for(i = 1;i<=n;i++)       scanf("%d",&val[i]);    find(1);    find(2);    return 0;}


 

原创粉丝点击