随笔-68  评论-10  文章-0  trackbacks-0
题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2823
#include<iostream>
using namespace std;
int n,k;
int a[1000002];
void puts_val(int flag)
{
     
int q[1000002];
     
int i,head=0,tail=0;
     
if(flag)
     
{
         
for(i=1;i<=k-1;i++)
         
{
             
while(head<tail&&a[q[tail-1]]<a[i]) tail--;
             q[tail
++]=i;
         }

         
for(i=k;i<=n;i++)
         
{
             
while(head<tail&&a[q[tail-1]]<a[i]) tail--;
             q[tail
++]=i;
             
while(head<tail&&i-q[head]>=k) head++;
             
if(i!=n) printf("%d ",a[q[head]]);
             
else printf("%d\n",a[q[head]]);
         }
  
     }

     
else
     
{
         
for(i=1;i<=k-1;i++)
         
{
             
while(head<tail&&a[q[tail-1]]>a[i]) tail--;
             q[tail
++]=i;             
         }

         
for(i=k;i<=n;i++)
         
{
              
while(head<tail&&a[q[tail-1]]>a[i]) tail--;
              q[tail
++]=i;
              
while(head<tail&&i-q[head]>=k)  head++;
              
if(i!=n) printf("%d ",a[q[head]]);
              
else printf("%d\n",a[q[head]]);
         }

     }

}

int main()
{
    scanf(
"%d%d",&n,&k);
    
for(int i=1;i<=n;i++)
    scanf(
"%d",&a[i]);
    puts_val(
0);
    puts_val(
1);
    
//system("pause");
    return 0;
}

posted on 2010-08-24 17:23 wuxu 阅读(173) 评论(0)  编辑 收藏 引用 所属分类: 数据结构

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理