[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 ...
随机推荐
- LeetCode Golang 3. 无重复字符的最长子串
3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串 ...
- POJ 1905 Expanding Rods( 二分搜索 )
题意:一个钢棍在两面墙之间,它受热会膨胀成一个圆弧形物体,这个物体长 S = ( 1 + n * C ) * L,现在给出原长 L ,温度改变量 n ,和热膨胀系数 C,求膨胀后先后中点的高度差. 思 ...
- 51nod-字符串连接
输入n个字符串s[i],你要把他们按某个顺序连接起来,使得字典序最小. (1 <= n <= 100) (每个字符串长度 <= 100) (字符串只包含小写字母) Input 第一行 ...
- phpMyAdmin 高级功能尚未完全设置,部分功能未激活(转载)
phpMyAdmin 高级功能尚未完全设置,部分功能未激活.请点击这里查看原因. 第一步: 使用Mysql管理员帐号通过phpmyadmin登陆,然后点击“导入”,然后点击“浏览”按钮,找到phpmy ...
- MyBatis学习总结(18)——MyBatis与Hibernate区别
也用了这么久的Hibernate和MyBatis了,一直打算做一个总结,就他们之间的优缺点说说我自己的理解: 首先,Hibernate是一个ORM的持久层框架,它使用对象和我们的数据库建立关系,在Hi ...
- mysql5.7官网直译SQL语句优化--分组优化
1.14Group By Optimization 分组优化 大多数方法为了满足分组查询需要扫描整个表并且创建一个临时表,其中每组中的值都是连续的,如果可以使用聚合函数和临时表获取各个分组.在某些情况 ...
- 洛谷—— P3225 [HNOI2012]矿场搭建
https://www.luogu.org/problem/show?pid=3225 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有 ...
- 字符串的HashCode可能相同
字符串的HashCode可能相同 学习了:http://blog.csdn.net/hl_java/article/details/71511815
- linux内核模块笔记
主题: 1. 嵌入式基础知识 2. linux内核介绍 3. 内核的编译和安装(x86) 4. 第一个模块 5. 模块的相关工具 6. 模块的符号导出 7. 模块的參数 1.看linux/module ...
- C++ 虚函数的缺省參数问题
前些日子,有个同学问我一个关于虚函数的缺省參数问题.他是从某个论坛上看到的.可是自己没想通.便来找我. 如今分享一下这个问题.先看一小段代码: #include <iostream> us ...