求连续的k个中最大最小值,k是滑动的,每次滑动一个

用双端队列维护可能的答案值

假设要求最小值,则维护一个单调递增的序列

对一開始的前k个,新增加的假设比队尾的小。则弹出队尾的,直到新增加的比队尾大。增加队尾

从第k+1个到最后一个,依照上述规则,压入新数,然后弹出队首元素(满足队首元素相应原来序列的位置必须在视窗内。否则,继续弹出下一个)

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std; inline void put(int x){
if(x< 0){
putchar('-');
x = -x;
}
if(x == 0){
putchar('0');
return;
}
char s[20];
int bas = 0;
for(;x;x/=10)s[bas++] = x%10+'0';
for(;bas--;)putchar(s[bas]);
return;
} int n,k;
int num[1111111];
int ansmin[1111111];
int pj;
int ansmax[1111111];
int pjj;
struct node
{
int p,v;
}q[1111111];
int main()
{
#ifndef ONLINE_JUDGE
freopen("G:/1.txt","r",stdin);
freopen("G:/2.txt","w",stdout);
#endif
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&num[i]);
}
int start=1,tail=1;
for(int i=1;i<=n;i++)
{
if(i==1)
{
q[1].v=num[1];
q[1].p=1;
}
// for(int j=tail;j>=start;j--)//弹出比它大的数
// {
// if(q[j].v>num[i])
// tail--;
// }
while(tail>=start&&q[tail].v>num[i])
tail--;
q[++tail].v=num[i];
q[tail].p=i;//将该数加到尾巴
//開始输出最小值
if(i>=k)
{
while(i-q[start].p>k-1) start++;
ansmin[pj++]=q[start].v;
}
}
start=1;tail=1;
for(int i=1;i<=n;i++)
{
if(i==1)
{
q[1].v=num[1];
q[1].p=1;
}
// for(int j=tail;j>=start;j--)//弹出比它小的数
// {
// if(q[j].v<num[i])
// tail--;
// }
while(tail>=start&&q[tail].v<num[i])
tail--;
q[++tail].v=num[i];
q[tail].p=i;//将该数加到尾巴
//開始输出最小值
if(i>=k)
{
while(i-q[start].p>k-1) start++;
ansmax[pjj++]=q[start].v;
}
}
for(int i=0;i<pj;i++)
{
put(ansmin[i]);
//printf("%d%c",ansmin[i],i==pj-1?'\n':' ');
putchar(' ');
}
putchar('\n');
for(int i=0;i<pjj;i++)
{
put(ansmax[i]);
//printf("%d%c",ansmax[i],i==pjj-1?'\n':' ');
putchar(' ');
}
putchar('\n');
}

POJ2823 Sliding Window【双端队列】的更多相关文章

  1. POJ2823 Sliding Window (单调队列)

    POJ2823 Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 38342   Accepte ...

  2. POJ2823 Sliding Window(单调队列)

    题目要输出一个序列各个长度k的连续子序列的最大值最小值. 多次RMQ的算法也是能过的,不过单调队列O(n). 这题,队列存元素值以及元素下标,队尾出队维护单调性然后入队,队首出队保持新元素下标与队首元 ...

  3. [POJ2823] Sliding Window 「单调队列」

    我们从最简单的问题开始: 给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k. 要求:   f(i) = max{ a(i-k+1),a(i-k+2),..., a(i) },i ...

  4. 双端队列(单调队列)poj2823 区间最小值(RMQ也可以)

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 41844   Accepted: 12384 ...

  5. POJ 2823 Sliding Window(单调队列入门题)

      Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 67218   Accepted: 190 ...

  6. lintcode二叉树的锯齿形层次遍历 (双端队列)

    题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出 ...

  7. lintcode 滑动窗口的最大值(双端队列)

    题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为  ...

  8. STL---deque(双端队列)

    Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结 ...

  9. hdu-5929 Basic Data Structure(双端队列+模拟)

    题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

随机推荐

  1. User-defined types

    We have used many of Python’s built-in types; now we are going to define a new type. As an example, ...

  2. 19.允许重复的unordered_map

    #include <string> #include <iostream> //查询性能最高 //允许重复的,hash_map #include <unordered_m ...

  3. ubuntu创建文件夹桌面快捷方式

    最近在使用dropbox,用来存储一些自己的markdown笔记和pdf文件.觉得放一个快捷方式在桌面上比较方便,但是lxde似乎没有直接创建桌面快捷方式的功能(或者是我没有找到),就上网查了一下,顺 ...

  4. Auto-Publishing and Monitoring APIs With Spring Boot--转

    原文地址:https://dzone.com/articles/auto-publishing-amp-monitoring-apis-with-spring-bo If you are headin ...

  5. 滑动切换Activity代码

    最近需要对练习项目中的代码进行优化,发现很多代码写起来远比想象的困难很多.刚接触Android时间不长,很多东西都不能融会贯通,所以才会有这样的问题存在,当然学习中遇到的问题很有必要做个总结.想想这个 ...

  6. NodeJS学习笔记 (17)集群-cluster(ok)

    cluster模块概览 node实例是单线程作业的.在服务端编程中,通常会创建多个node实例来处理客户端的请求,以此提升系统的吞吐率.对这样多个node实例,我们称之为cluster(集群). 借助 ...

  7. iOS开发——打包报错error: linker command failed with exit code 1

    真机运行没问题,打包报错: clang: error: linker command failed with exit code 1 (use -v to see invocation) 原因:在Xc ...

  8. JAVA版本区块链钱包核心代码

    Block.java package com.ppblock.blockchain.core; import java.io.Serializable; /** * 区块 * @author yang ...

  9. 常见bug分析

    变量类型不匹配,形参和实参类型不匹配,隐式类型转换,变量类型赋值不匹配, 工具不熟悉,导致逻辑错误,查看代码,测试驱动开发,完整的测试用例,覆盖所有分支, 变量超出范围,对于大的数据要特别注意, 工具 ...

  10. MAC下搭建appium UI自动化环境

    参考资料: http://qa.blog.163.com/blog/static/190147002201510161119832/ http://blog.csdn.net/liuchunming0 ...