题目大意:有一列数,和一个窗口,一次能框连续的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的更多相关文章

  1. 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)

    To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...

  2. 洛谷 P1886 滑动窗口(单调队列)

    题目链接 https://www.luogu.org/problemnew/show/P1886 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始 ...

  3. 洛谷P1886滑动窗口

    题目传送门 理解题意:给定一个数列和窗口范围k,求依次向右移动窗口时每次窗口内的最大和最小值. 没什么思维难度,一边扫过去,用两个数组maxx和minn记录每个窗口内的最大最小值,移动过程中用两个变量 ...

  4. 洛谷——P1886 滑动窗口|| POJ——T2823 Sliding Window

    https://www.luogu.org/problem/show?pid=1886#sub || http://poj.org/problem?id=2823 题目描述 现在有一堆数字共N个数字( ...

  5. 洛谷 P1886 滑动窗口

    题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...

  6. [洛谷P1886]滑动窗口 (单调队列)(线段树)

    ---恢复内容开始--- 这是很好的一道题 题目描述: 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口. 现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的 ...

  7. 洛谷 P1886 滑动窗口 (数据与其他网站不同。。)

    题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...

  8. 洛谷 P1886 滑动窗口(单调队列)

    嗯... 题目链接:https://www.luogu.org/problem/P1886 首先这道题很典型,是标准的单调队列的模板题(也有人说单调队列只能解决这一个问题).这道题可以手写一个队列,也 ...

  9. 洛谷 P1886 滑动窗口 /【模板】单调队列

    纯板子题,入队时保证单调性,即单调栈,出队保证题目条件,本题即窗口长度k,在入队出队时都可以维护信息 ; int buf[maxm], maxq[maxm], minq[maxm], ans1[max ...

随机推荐

  1. ZBrush破解版真的好用么?

    安装ZBrush®的时候是不是经常出现各种奇葩问题,使用ZBrush时候是不是经常出现停止工作状况,究其原因,原来都是破解搞的鬼.ZBrush破解版你还敢用么? 随着国人对版权的重视,越来越多的制作商 ...

  2. Python 九九乘法表打印

    Python 九九乘法表打印 小练习 for i in range(1,10,1): for j in range(1,i+1): print("%s*%s=%s" %(j,i,i ...

  3. Jquery复习总结

    1.选择器: $(".class") $("#id") $("div") $("a p") $(div:first).c ...

  4. poj 2288 Islands and Bridges (状压dp+Tsp问题)

    这道题千辛万苦啊! 这道题要涉及到当前点和前面两个点,那就设dp[state][i][j]为当前状态为state,当前点为i,前一个点为j 这个状态表示和之前做炮兵那题很像,就是涉及到三个点时,就多设 ...

  5. Unity的Json解析<一>--读取Json文件

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50373558 作者:car ...

  6. HDU 4372

    想了很久,终于想到了.... 向后看到F,向前看到B,假如把N-1个楼分成F+B个组,则把每个组最高的楼作为看到的楼,那么,其实在确定每一组的最高楼时,左边或右边的最高楼的顺序已经确定了.由于是排列数 ...

  7. WCF 无法激活服务,由于它不支持 ASP.NET 兼容性。已为此应用程序启用了 ASP.NET 兼容性

    作者:jiankunking 出处:http://blog.csdn.net/jiankunking 错误信息: 无法激活服务.由于它不支持 ASP.NET 兼容性.已为此应用程序启用了 ASP.NE ...

  8. 【万里征程——Windows App开发】控件大集合2

    以下再来看看一些前面还没有讲过的控件,只是控件太多以至于无法所有列出来,大家仅仅好举一反三啦. Button 前面最经常使用的控件就是Button啦,Button另一个有意思的属性呢.当把鼠标指针放在 ...

  9. Mongodb简单介绍

    1. 简单介绍 Mongodb是一种强大.灵活,可扩展的数据存储方式.属于nosql.非关系型数据库的一种. mongodb是面向文档的数据库. 尽管是非关系型数据库.可是它保留了很多关系型数据库的特 ...

  10. 37、ifconfig命令

    很多windows很熟悉ipconfig命令行工具.它被用来获取网络接口配置信息并对此进行改动.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config). 通常须 ...