题目要输出一个序列各个长度k的连续子序列的最大值最小值。

多次RMQ的算法也是能过的,不过单调队列O(n)。

这题,队列存元素值以及元素下标,队尾出队维护单调性然后入队,队首出队保持新元素下标与队首元素下标差小于k。

以前写的还是3个if-else,重写了下。。不加输出挂会T。。

 #include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 1111111
inline void in(int &ret){
char c; int sgn;
while(c=getchar(),c!='-'&&(c<''||c>'')) if(c==EOF) return;
sgn=(c=='-')?-:; ret=(c=='-')?:(c-'');
while(c=getchar(),c>=''&&c<='') ret=ret*+(c-'');
ret*=sgn;
}
void out(int x){
if(x<){
putchar('-'); out(-x);
return;
}
if(x>) out(x/);
putchar(x%+'');
}
int que[MAXN],idx[MAXN],front,rear;
int a[MAXN];
int main(){
int n,k;
in(n); in(k);
for(int i=; i<=n; ++i){
in(a[i]);
}
for(int i=; i<=n; ++i){
if(front!=rear && idx[front]+k<=i) ++front;
while(front!=rear && que[rear-]>=a[i]) --rear;
idx[rear]=i; que[rear]=a[i]; ++rear;
if(i>=k){
out(que[front]); putchar(' ');
}
}
putchar('\n');
front=rear=;
for(int i=; i<=n; ++i){
if(front!=rear && idx[front]+k<=i) ++front;
while(front!=rear && que[rear-]<=a[i]) --rear;
idx[rear]=i; que[rear]=a[i]; ++rear;
if(i>=k){
out(que[front]); putchar(' ');
}
}
return ;
}

POJ2823 Sliding Window(单调队列)的更多相关文章

  1. POJ2823 Sliding Window(单调队列)

    单调队列,我用deque维护.这道题不难写,我第二次写单调队列,1次AC. -------------------------------------------------------------- ...

  2. POJ 2823 Sliding Window + 单调队列

    一.概念介绍 1. 双端队列 双端队列是一种线性表,是一种特殊的队列,遵守先进先出的原则.双端队列支持以下4种操作: (1)   从队首删除 (2)   从队尾删除 (3)   从队尾插入 (4)   ...

  3. poj 2823 Sliding Window (单调队列入门)

    /***************************************************************** 题目: Sliding Window(poj 2823) 链接: ...

  4. POJ 2823:Sliding Window 单调队列

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 48930   Accepted: 14130 ...

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

    单调队列 加了读入挂比不加更慢.... 而且这份代码要交c++ 有大神G++跑了700ms..... orzorzorz #include<iostream> #include<cs ...

  6. POJ 2823 UESTCoj 1221 Sliding Window 单调队列 经典入门题

    题意:给出一个序列,求出每连续k个数字中最大的数和最小的数. 这是道单调队列裸题,直接写就行了. 本来用deque写出来后,发现在poj上硬是超时了,在discuss上看很多人也在抱怨超时的问题,据说 ...

  7. POJ2823 Sliding Window (单调队列)

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

  8. [POJ2823]Sliding Window 滑动窗口(单调队列)

    题意 刚学单调队列的时候做过 现在重新做一次 一个很经典的题目 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗 ...

  9. [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 ...

随机推荐

  1. php面试题之三——PHP语言基础(基础部分)

    三.PHP语言基础 1. strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部) strlen和mb_strlen都是用于获取字符串长度. strlen只针对单字节编码字符,也 ...

  2. [Effective JavaScript 笔记]第25条:使用bind方法提取具有确定接收者的方法

    js里方法和属性值为函数,就像一个东西两种称呼一个样,比如土豆,也叫马铃薯,一个样.既然一样,那就可以对对象的方法提取出来为函数,然后把提取出来的函数作为回调函数直接传递给高阶函数. 高阶函数是什么 ...

  3. 腾讯即时聊天sdk

    一. 初始化 腾讯即时通讯sdk 1. 程序日志注册 2. 连接通知回调  专门的类管理 3. 信息通知回调 专门的类 4. 初始化sdk 5. 注册推送 分ios8/ios以前 注册推送成功回调 发 ...

  4. basic use of sidekiq

    参考页面 https://github.com/mperham/sidekiq https://github.com/mperham/sidekiq/wiki/Getting-Started 强烈推荐 ...

  5. Python strip、lstrip和rstrip的用法

    Python中strip用于去除字符串的首尾字符,同理,lstrip用于去除左边的字符,rstrip用于去除右边的字符. 这三个参数都可以传入一个参数,指定要去除的首尾字符. 需要注意的是,传入的是一 ...

  6. JetBrains WebStorm 7.0 Build 131.202 Win/Mac/Liniux

    JetBrains WebStorm 7.0 Build 131.202 (Win/Mac/Liniux) | 121.6/106/133 Mb WebStorm 7 — Everything you ...

  7. Windows下的git配置

    需要的配置: 1.C:\Program Files\Git\etc\git-completion.bash: alias ls='ls --show-control-chars --color=aut ...

  8. Flatten Binary Tree to Linked List

    Flatten a binary tree to a fake "linked list" in pre-order traversal. Here we use the righ ...

  9. python将json格式的数据转换成文本格式的数据或sql文件

    python如何将json格式的数据快速的转化成指定格式的数据呢?或者转换成sql文件? 下面的例子是将json格式的数据准换成以#_#分割的文本数据,也可用于生成sql文件. [root@bogon ...

  10. iOS 利用constraint实现2个控件上下的空白是相等的

    说的有点乱,先看个图把 其实这个constrant的目的就是控制两个方形的控件上方和下方的空白大小. 对于每一个方块来说,他们上方和下方的空白是相同的.这种“居中”的设计到处可见.一个控件想实现这种居 ...