洛谷 P1886 滑动窗口 题解
每日一题 day26 打卡
Analysis
单调队列模板
对于每一个区间,有以下操作:
1、维护队首(就是如果你已经是当前的m个之前那你就可以被删了,head++)
2、在队尾插入(每插入一个就要从队尾开始往前去除冗杂状态)
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #define int long long
- #define maxn 1000000+10
- using namespace std;
- inline int read()
- {
- int x=;
- bool f=;
- char c=getchar();
- for(; !isdigit(c); c=getchar()) if(c=='-') f=;
- for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
- if(f) return x;
- return -x;
- }
- inline void write(int x)
- {
- if(x<){putchar('-');x=-x;}
- if(x>)write(x/);
- putchar(x%+'');
- }
- int n,k;
- int a[maxn];
- int deque[maxn],deque_num[maxn];
- inline void solve_min()
- {
- int head=,tail=;
- for(int i=;i<=n;i++)
- {
- while(head<=tail&&deque[tail]>=a[i]) tail--;
- deque[++tail]=a[i];
- deque_num[tail]=i;
- while(head<=tail&&deque_num[head]<=i-k) head++;
- if(i>=k)
- {
- write(deque[head]);
- printf(" ");
- }
- }
- printf("\n");
- }
- inline void solve_max()
- {
- int head=,tail=;
- for(int i=;i<=n;i++)
- {
- while(head<=tail&&deque[tail]<=a[i]) tail--;
- deque[++tail]=a[i];
- deque_num[tail]=i;
- while(head<=tail&&deque_num[head]<=i-k) head++;
- if(i>=k)
- {
- write(deque[head]);
- printf(" ");
- }
- }
- }
- signed main()
- {
- n=read();k=read();
- for(int i=;i<=n;i++) a[i]=read();
- solve_min();
- memset(deque,,sizeof(deque));
- memset(deque_num,,sizeof(deque_num));
- solve_max();
- return ;
- }
- /*
- 10 3
- -94 21 24 73 38 77 11 73 9 -88
- -94 21 24 38 11 11 9 -88
- 24 73 73 77 77 77 73 73
- */
请各位大佬斧正(反正我不认识斧正是什么意思)
洛谷 P1886 滑动窗口 题解的更多相关文章
- 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)
To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...
- [POJ2823][洛谷P1886]滑动窗口 Sliding Window
题目大意:有一列数,和一个窗口,一次能框连续的s个数,初始时窗口在左端,不断往右移动,移到最右端为止,求每次被框住的s个数中的最小数和最大数. 解题思路:这道题是一道区间查询问题,可以用线段树做.每个 ...
- 洛谷 P1886 滑动窗口(单调队列)
题目链接 https://www.luogu.org/problemnew/show/P1886 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始 ...
- 洛谷P1886滑动窗口
题目传送门 理解题意:给定一个数列和窗口范围k,求依次向右移动窗口时每次窗口内的最大和最小值. 没什么思维难度,一边扫过去,用两个数组maxx和minn记录每个窗口内的最大最小值,移动过程中用两个变量 ...
- 洛谷 P1886 滑动窗口
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
- [洛谷P1886]滑动窗口 (单调队列)(线段树)
---恢复内容开始--- 这是很好的一道题 题目描述: 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口. 现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的 ...
- 洛谷 P1886 滑动窗口 (数据与其他网站不同。。)
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
- 洛谷——P1886 滑动窗口|| POJ——T2823 Sliding Window
https://www.luogu.org/problem/show?pid=1886#sub || http://poj.org/problem?id=2823 题目描述 现在有一堆数字共N个数字( ...
- 洛谷 P1886 滑动窗口(单调队列)
嗯... 题目链接:https://www.luogu.org/problem/P1886 首先这道题很典型,是标准的单调队列的模板题(也有人说单调队列只能解决这一个问题).这道题可以手写一个队列,也 ...
随机推荐
- python学习-66 面向对象3 - 多态
多态 1.什么是多态 由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同. 举例: class H2O: def __init__(self,type,tem): self.type = ty ...
- 2019-10-11 ubuntu ssh远程免密登录配置及配置别名
在客户端能正常远程访问服务端的前提下. 客户端: 1)配置免密 执行 ssh-keygen 即可生成 SSH 钥匙,回车三次. 执行 ssh-copy-id user@remote,可以让远程服务器记 ...
- MySQL运维中的Tips--持续更新
1.into outfile 生成sql:一般都是生成文本或者其他形式的文件,现在需要生成sql形式的文件.配置文件加secure_file_priv=''select concat('insert ...
- IdentityServer4使用OpenIdConnect实现单点登录
接上一篇:IdentityServer4实现OAuth2.0四种模式之授权码模式 前面写的四种OAuth2.0实现模式只涉及到IdentityServer4的OAuth2.0特性,并没有涉及到OenI ...
- 博客使用 utterances 作为评论系统
utterances 是一款基于 GitHub issues 的评论工具. 相比同类的工具 gitment.gitalk 以及 disqus 评论工具,优点如下: 极其轻量 加载非常快 配置比较简单 ...
- day33-python之多线程
1.多线程实例 # import threading # import time # # import threading import time class MyThread(threading.T ...
- FreeRTOS中断测试
configMAX_SYSCALL_INTERRUPT_PRIORITY 高于此优先级的中断,不能被禁止 #ifdef __NVIC_PRIO_BITS #define configPRIO_BITS ...
- live555的使用(转载)
Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等的支持.Live555实现 了对多种音视频编码格式的音视频数据的流 ...
- with读、写文件
1.with写文件 save_file = "1.txt" str_data = "123a\nbc" with open(save_file, 'a', en ...
- Android笔记(六十七) 自定义控件
实际编程中,系统提供的控件往往无法满足我们的需求,一来是样子丑陋,二来是一些复杂的组合需要多次使用的话,每次都写一堆控件的组合会很耗费时间,所以我们将这些组件的组合自定义为一个新的控件,以后使用的时候 ...