求连续的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. NAS是什么

    NAS是什么 简介 NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”.它是一种专用数据存储服务器. ...

  2. List methods

    Python provides methods that operate on lists. For example, append adds a new element to the end of ...

  3. ListView的setOnItemClickListener回调不能执行的解决

    如果ListView中的单个Item的view中存在checkbox,button等view,会导致ListView.setOnItemClickListener无效,事件会被子View捕获到,Lis ...

  4. P1452 Beauty Contes(旋转卡壳版)

    题目背景 此处省略1W字^ ^ 题目描述 贝茜在牛的选美比赛中赢得了冠军”牛世界小姐”.因此,贝西会参观N(2 < = N < = 50000)个农场来传播善意.世界将被表示成一个二维平面 ...

  5. 基于jquery 的find()函数和children()函数的区别

    element.find(selector)  返回匹配element集合中每个元素的后代,参数selector是必须的,可以通过选择器对元素进行过滤,筛选出符合条件的元素.如果想选中所有的后代元素, ...

  6. SPOJ 7258 SUBLEX 后缀数组 + 二分答案 + 前缀和

    Code: #include <cstdio> #include <algorithm> #include <cstring> #define setIO(s) f ...

  7. [洛谷P3929]SAC E#1 - 一道神题 Sequence1

    题目大意:给你一串数列,问你能否改变1个数或不改,使它变成波动数列? 一个长度为n的波动数列满足对于任何i(1 <= i < n),均有: a[2i-1] <= a[2i] 且 a[ ...

  8. shell应用之批量添加用户实例

    这里要实现功能介绍 读取一个用户列表文件 给列表中的用户添加随机密码需要包含大小写字符和数字 保存对应的用户和密码文件 这些用户属于同个用户组 1.列表文件 [root@mail ~]# cat li ...

  9. QQ音乐

    import re import requestsimport json class Search: def __init__(self, song): ''' self.vkey_url ---&g ...

  10. 20180929 北京大学 人工智能实践:Tensorflow笔记03

    更改的程序部分如下: 另: 难?????????????见链接: https://www.bilibili.com/video/av22530538/?p=17 + (完)