[POJ2823][洛谷P1886]滑动窗口 Sliding Window
题目大意:有一列数,和一个窗口,一次能框连续的s个数,初始时窗口在左端,不断往右移动,移到最右端为止,求每次被框住的s个数中的最小数和最大数。
解题思路:这道题是一道区间查询问题,可以用线段树做。每个节点保存最大值和最小值即可。
注意点:①当s=1时可直接输出,否则会很慢;②查询操作不要返回值,我当时直接返回了struct,导致洛谷上TLE;③POJ上用C++提交,G++会TLE。
C++ Code:
- #include<cstdio>
- #include<cctype>
- #define max(a,b) (((a)>(b))?(a):(b))
- #define min(a,b) (((a)<(b))?(a):(b))
- struct node{
- int Max,Min;
- node(int a=-1000000000,int b=1000000000):Max(a),Min(b){}
- }d[4000401],ans[1000041];
- int n,s,ansMax,ansMin;
- inline int readint(){
- char c=getchar();
- bool b=false;
- while(!isdigit(c))b=c=='-',c=getchar();
- int p=0;
- while(isdigit(c))p=(p<<3)+(p<<1)+(c^'0'),c=getchar();
- return (b)?(-p):p;
- }
- void bt(int l,int r,int o){
- if(l==r){
- d[o].Max=d[o].Min=readint();
- return;
- }
- int mid=l+r>>1;
- bt(l,mid,o<<1);
- bt(mid+1,r,o<<1|1);
- d[o].Max=max(d[o<<1].Max,d[o<<1|1].Max);
- d[o].Min=min(d[o<<1].Min,d[o<<1|1].Min);
- }
- void query(int l,int r,int o,int L,int R){
- if(L<=l&&r<=R){
- ansMax=max(ansMax,d[o].Max);
- ansMin=min(ansMin,d[o].Min);
- return;
- }
- int mid=l+r>>1;
- if(L<=mid)query(l,mid,o<<1,L,R);
- if(mid<R)query(mid+1,r,o<<1|1,L,R);
- }
- int main(){
- n=readint(),s=readint();
- if(s==1){
- for(int i=1;i<n;++i){
- ans[i].Max=readint();
- printf("%d ",ans[i].Max);
- }
- printf("%d\n",ans[n].Max=readint());
- for(int i=1;i<n;++i)printf("%d ",ans[i].Max);
- printf("%d\n",ans[n].Max);
- return 0;
- }
- bt(1,n,1);
- for(int i=s;i<=n;++i){
- ansMax=-1000000000,ansMin=1000000000;
- query(1,n,1,i-s+1,i);
- ans[i].Max=ansMax;
- ans[i].Min=ansMin;
- }
- for(int i=s;i<n;++i)printf("%d ",ans[i].Min);
- printf("%d\n",ans[n].Min);
- for(int i=s;i<n;++i)printf("%d ",ans[i].Max);
- printf("%d\n",ans[n].Max);
- return 0;
- }
[POJ2823][洛谷P1886]滑动窗口 Sliding Window的更多相关文章
- 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)
To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...
- 洛谷 P1886 滑动窗口(单调队列)
题目链接 https://www.luogu.org/problemnew/show/P1886 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始 ...
- 洛谷P1886滑动窗口
题目传送门 理解题意:给定一个数列和窗口范围k,求依次向右移动窗口时每次窗口内的最大和最小值. 没什么思维难度,一边扫过去,用两个数组maxx和minn记录每个窗口内的最大最小值,移动过程中用两个变量 ...
- 洛谷——P1886 滑动窗口|| POJ——T2823 Sliding Window
https://www.luogu.org/problem/show?pid=1886#sub || http://poj.org/problem?id=2823 题目描述 现在有一堆数字共N个数字( ...
- 洛谷 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 滑动窗口(单调队列)
嗯... 题目链接:https://www.luogu.org/problem/P1886 首先这道题很典型,是标准的单调队列的模板题(也有人说单调队列只能解决这一个问题).这道题可以手写一个队列,也 ...
- 洛谷 P1886 滑动窗口 /【模板】单调队列
纯板子题,入队时保证单调性,即单调栈,出队保证题目条件,本题即窗口长度k,在入队出队时都可以维护信息 ; int buf[maxm], maxq[maxm], minq[maxm], ans1[max ...
随机推荐
- event 下鼠标坐标的获取
event.clientX.event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标准事件都定义了这2个属性 event.pageX ...
- spring mvc 下载的时候中文文件名不显示
Headers.add("Content-Disposition", "attachment;filename=" + new String(file.getB ...
- (转载)spring 之间的远程调用-Spring Http调用的实现
原文:https://www.cnblogs.com/lewisat/p/6132082.html 1:Spring Http设计思想 最近在研究公司自己的一套rpc远程调用框架,看到其内部实现的设计 ...
- [using_microsoft_infopath_2010]Chapter2 表单需求,使用表决矩阵
本章概要 1.从模板创建表单 2.从创建表单收集需求 3.使用全部表单决策 4.决定需要创建哪种表单
- linux gnome kde点滴
2014.12.08 下面切换的方法对于fedora 17没有效果,对于fedora 17, 要使用system-switch-displaymanager,出现 点击相应的选项,然后就进入相应的启动 ...
- HDU 1796
呃,我竟然傻了,同时被a且b整除的个数为n/(a*b). 其实应该是n/[a,b]才对,是他们的最小公倍数啊... #include <iostream> #include <cst ...
- [Angular] Read Custom HTTP Headers Sent by the Server in Angular
By default the response body doesn’t contain all the data that might be needed in your app. Your ser ...
- android的架构图
1.Applications 该层是Android应用程序层. 每一个应用必须利用android系统设计的应用框架(application framework)开发. 眼下的开发环境是eclipse ...
- How to start/stop DB instance of Oracle under Linux
All below actions should be executed with "oracle" user account 1. Check the status of lis ...
- POJ 2318 叉积判断点与直线位置
TOYS Description Calculate the number of toys that land in each bin of a partitioned toy box. Mom ...