【洛谷】【线段树】P1886 滑动窗口
【题目描述:】
现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。
【输入格式:】
输入一共有两行,第一行为n,k。
第二行为n个数(<INT_MAX).
【输出格式:】
输出共两行,第一行为每次窗口滑动的最小值
第二行为每次窗口滑动的最大值
输入样例#: - - 输出样例#:
- - - -
输入输出样例
【算法分析:】
线段树使用结构体同时维护区间最小值和最大值
没有修改只有建树和查询操作,更优的方法是使用st表做RMQ
板子题.
【代码:】
//滑动窗口
#include<iostream>
#include<cstdio>
using namespace std; const int MAXN = 1e6 + ; int n, k;
int a[MAXN];
struct Segment {
int maxn, minn;
}t[MAXN << ]; void Build(int o, int l, int r) {
if(l == r) t[o].maxn = t[o].minn = a[l];
else {
int mid = (l + r) >> ;
Build(o << , l , mid);
Build(o << |, mid + , r);
t[o].maxn = max(t[o << ].maxn, t[o << |].maxn);
t[o].minn = min(t[o << ].minn, t[o << |].minn);
}
}
int max_ans, min_ans;
void Query(int o, int l, int r, int ql, int qr) {
if(ql <= l && r <= qr) {
max_ans = max(max_ans, t[o].maxn);
min_ans = min(min_ans, t[o].minn);
}
else {
int mid = (l + r) >> ;
if(ql <= mid) Query(o << , l, mid, ql, qr);
if(qr > mid) Query(o << |, mid + , r, ql, qr);
}
} int ans1[MAXN], ans2[MAXN];
int main() {
scanf("%d%d", &n, &k);
for(int i = ; i <= n; ++i)
scanf("%d", &a[i]);
Build(, , n);
for(int i = ; i + k - <= n; ++i) {
max_ans = -2e9, min_ans = 2e9;
Query(, , n, i, i + k - );
ans1[i] = max_ans, ans2[i] = min_ans;
}
for(int i = ; i <= n - k + ; ++i) printf("%d ", ans2[i]);
putchar('\n');
for(int i = ; i <= n - k + ; ++i) printf("%d ", ans1[i]);
}
【洛谷】【线段树】P1886 滑动窗口的更多相关文章
- 单调队列优化&&P1886 滑动窗口题解
单调队列: 顾名思义,就是队列中元素是单调的(单增或者单减). 在某些问题中能够优化复杂度. 在dp问题中,有一个专题动态规划的单调队列优化,以后会更新(现在还是太菜了不会). 在你看到类似于滑动定长 ...
- Luogu P1886 滑动窗口
P1886 滑动窗口 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The a ...
- P1886 滑动窗口(单调队列)
P1886 滑动窗口 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: ...
- P1886 滑动窗口&&P1440 求m区间内的最小值
声明:下面这两个题就不要暴力了,学一学单调队列吧 推荐博文:https://www.cnblogs.com/tham/p/8038828.html 单调队列入门题 P1440 求m区间内的最小值 题目 ...
- [洛谷P1886]滑动窗口 (单调队列)(线段树)
---恢复内容开始--- 这是很好的一道题 题目描述: 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口. 现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的 ...
- 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)
To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...
- [POJ2823][洛谷P1886]滑动窗口 Sliding Window
题目大意:有一列数,和一个窗口,一次能框连续的s个数,初始时窗口在左端,不断往右移动,移到最右端为止,求每次被框住的s个数中的最小数和最大数. 解题思路:这道题是一道区间查询问题,可以用线段树做.每个 ...
- 洛谷 P1886 滑动窗口 (数据与其他网站不同。。)
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
- 洛谷 P1886 滑动窗口(单调队列)
题目链接 https://www.luogu.org/problemnew/show/P1886 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始 ...
随机推荐
- .net core 2.2 部署CentOS7(5)部署.net core mvc
目录: .net core 2.2 部署CentOS7(1)安装虚拟机 .net core 2.2 部署CentOS7(2)给虚拟机安装CentOS7 .net core 2.2 部署CentOS7( ...
- Jquery Easy UI初步学习(二)datagrid的使用
第一篇学的是做一个管理的外框,接着就是数据datagrid绑定了,这里我用asp.net mvc3来做的,主要就是熟悉属性.方法. 打开easyui的demo 就可以看到如下一段代码: 和上篇一样cl ...
- Cocoa pod导入第三方框架遇到的那点事儿
废话不多说,直接上干货. 以下所有操作均是在Cocoapod导入第三方库,并且是.xcworkspace的工程里面操作的, 1.导入头文件找不到,也就是所谓的,not find ''AFNetwork ...
- java集合(List集合与Map集合的数据转换)
List集合与Map集合的数据转换 实现List和Map数据的转换. 具体要求如下: 功能1:定义方法public void listToMap( ){ }将List中Student元素封装到Map中 ...
- 新项目找不到Angular-cli.json文件
新项目找不到Angular-cli.json文件 Angular-cli.json文件是Angular5中cli的相关配置信息. 今天创建了新Angular项目后突然发现Angular-cli.jso ...
- 关于vue2用vue-cli搭建环境后域名代理的http-proxy-middleware解决api接口跨域问题
在vue中用http-proxy-middleware来进行接口代理,比如:本地运行环境为http://localhost:8080但真实访问的api为 http://www.baidu.com这时我 ...
- android studio 加载libs
eclipse 项目转 android studio libs 不能加载 导致不能导入 记录下:libs 放在和src 同路径 dependencies:增加 compile files('libs ...
- 解决 login.live.com onedrive.live.com 等微软国外网站打不开问题
下面就分享一下通过更改HOSTS文件的方式打开onedrive网页版的方法. C:\Windows\System32\drivers\etc目录下的hosts文件把它复制到D盘,再复制一份放到桌面上. ...
- 分享泛微公司OA系统用于二次开发的sql脚本
本单位用的oa系统就是泛微公司的oa协同办公平台,下面是我对他进行二次开发统计用到的写数据库脚本,只做开发参考使用,对于该系统的二次开发技术交流可以加我q:2050372586 [仪表盘]格式sql编 ...
- 课后作业week 5 —— 两款修图软件优势及创新分析
由于我平时没事也会修修照片什么的,也用过一些不同种类的修图软件,这次作业就选择了其中两款比较热门的软件进行分析. 说到手机修图app,很多人很容易想到“美图秀秀”,的确这款app在修图软件领域的确算的 ...