题目传送门

  理解题意:给定一个数列和窗口范围k,求依次向右移动窗口时每次窗口内的最大和最小值。

  没什么思维难度,一边扫过去,用两个数组maxx和minn记录每个窗口内的最大最小值,移动过程中用两个变量L和R记录窗口的左右端点,然后判断滑动窗口时最大最小值是否被移出窗口,进入窗口的值是否大于当前最大值或小于当前最小值,做完后L++,R++,用while循环控制轻松水过这题。当然,如果数据比较极端故意卡时就可能没这么轻松了。(不过我估计也不太可能会有什么题目出这么可怕的数据)

  下面是AC代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#define N 1000010
#define ll long long
using namespace std;
const ll inf=;
ll n,k,a[N],maxx[N],minn[N];
void ready()
{
cin>>n>>k;
for(int i=;i<=n;i++)
cin>>a[i];
}
void work()
{
ll l=,r=k,cnt=;
ll mx=-inf,mn=inf;
for(int i=l;i<=r;i++){
mx=max(mx,a[i]);
mn=min(mn,a[i]);
}
maxx[++cnt]=mx;
minn[cnt]=mn;
l++;r++;
while(r<=n){
if(a[l-]==mx){
mx=-inf;
for(int i=l;i<=r;i++)
mx=max(mx,a[i]);}
if(a[l-]==mn){
mn=inf;
for(int i=l;i<=r;i++)
mn=min(mn,a[i]);}
if(a[r]>mx)mx=a[r];
if(a[r]<mn)mn=a[r];
maxx[++cnt]=mx;
minn[cnt]=mn;
l++;r++;
}
for(int i=;i<=cnt;i++)
cout<<minn[i]<<" ";
cout<<endl;
for(int i=;i<=cnt;i++)
cout<<maxx[i]<<" ";
}
int main()
{
//freopen("water.in","r",stdin);
std::ios::sync_with_stdio(false);
ready();work();return ;
}

当然,滑动窗口在其他很多算法中都会用到,所以很有必要掌握好。

洛谷P1886滑动窗口的更多相关文章

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

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

  2. [POJ2823][洛谷P1886]滑动窗口 Sliding Window

    题目大意:有一列数,和一个窗口,一次能框连续的s个数,初始时窗口在左端,不断往右移动,移到最右端为止,求每次被框住的s个数中的最小数和最大数. 解题思路:这道题是一道区间查询问题,可以用线段树做.每个 ...

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

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

  4. 洛谷 P1886 滑动窗口

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. java爬虫框架jsoup

    1.java爬虫框架的api jsoup:https://www.open-open.com/jsoup/

  2. bzoj 3524 可持久化线段树

    我们可以先离散化,然后建立权值的可持久化线段树,记录每个数出现的次数,对于区间询问直接判断左右儿子的cnt是不是大于(r-k+1)/2,然后递归到最后一层要是还是大于就有,否则不存在. 反思:挺简单一 ...

  3. bzoj 1058 bst

    因为是数列的维护,所以我们可以考虑用splay来维护,每次在x插入的时候就在x+1前面插入就行了,然后用bst来维护两问的答案,但是应该会tle.我们来考虑这个问题的性质,首先因为这个数列没有删除操作 ...

  4. bzoj 1202 并查集

    首先我们知道若干区间和信息,判断给出信息是否合法,可以用并查集维护,我们用dis[x]表示x到father[x]的距离为多少,即区间father[x]到x的长度,这样我们可以在路径压缩的时候维护dis ...

  5. .net XmlHelper xml帮助类

    using System.Data; using System.IO; using System.Xml; using System.Xml.Serialization; /// <summar ...

  6. Educational Codeforces Round 26 F. Prefix Sums 二分,组合数

    题目链接:http://codeforces.com/contest/837/problem/F 题意:如题QAQ 解法:参考题解博客:http://www.cnblogs.com/FxxL/p/72 ...

  7. 网站服务器压力Web性能测试(4):服务器压力Web性能测试小结

    1.Apache Bench,Webbench,http_load对网站压力Web性能进行测试时,为了得到更加客观和准确的数值,应该从远程访问.局域网访问和本地等多个方面进行全方位的测试.一般用127 ...

  8. 关于时间日期的一些操作--java

    # 原创,转载请留言联系 1.获取当前时间 public static void main(String[] args) { Date d1 = new Date(); System.out.prin ...

  9. 多路复用I/O模型select() 模型 代码实现

    多路复用I/O:  socket编程之select(),poll(),epoll() 代码: client.c #include <stdio.h> #include <sys/ty ...

  10. xshell 如何连接服务器

    https://jingyan.baidu.com/article/ab69b270b0ca3d2ca7189fdc.html 点击“新建”之后就会出现下面这样一个界面,“名称”根据自己的需求填写,“ ...