POJ 滑动窗口(优先队列的应用)

2023-05-16

数据结构与算法A (第三章 栈与队列 练习题): 滑动窗口

思路

对于最大最小值分别维护一个优先队列(保存元素下标)。以最小值为例。
每次遇到一个新元素,从队尾插入。插入时删去队列中比该值大的元素。(因为当前值出现的下标较晚,所以以后一定范围窗口的最小值不会超过该值)。队首是当前窗口的最小值。同时要注意维护队首的下标是否在当前窗口内。

#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

int n, k, mmin, mmax;
int arr[1010000];
// priority_queue<int> max_q;
// priority_queue<int, vector<int>, greater<int> >min_q;        // 存放当前窗口最大最小值
int min_q[1010000], max_q[1010000], min_left=0, min_right=0, max_left=0, max_right=0;
vector<int> min_v;
vector<int> max_v;      // 存放最小值和最大值序列

int main()
{
    //freopen("in.txt", "r", stdin);

    scanf("%d%d", &n, &k);
    for(int i=0;i<n;i++)
        scanf("%d", &arr[i]);

    for(int i=0;i<n;i++)
    {
        // 处理最小值队列
        // 当前处理第 i 个元素。从后方插入,遇到比他大的就删掉。
        while(min_right>min_left && arr[min_q[min_right-1]]>arr[i])
        {
            min_right--;
        }
        min_q[min_right++] = i;
        // 更新左边下标在范围之外的元素
        while(min_q[min_left] < i-k+1)
            min_left++;

        // 处理最大值队列
        while(max_right>max_left && arr[max_q[max_right-1]]<arr[i])
        {
            max_right--;
        }
        max_q[max_right++] = i;
        // 更新左边下标在范围之外的元素
        while(max_q[max_left] < i-k+1)
            max_left++;

        if(i >= k-1)
        {
            min_v.push_back(arr[min_q[min_left]]);
            max_v.push_back(arr[max_q[max_left]]);
        }
    }

    // 初始化窗口

    for(int i=0;i<n-k+1;i++)
    {
        printf("%d", min_v[i]);
        if(i != n-k)
            printf(" ");
    }
    printf("\n");
    for(int i=0;i<n-k+1;i++)
    {
        printf("%d", max_v[i]);
        if(i != n-k)
            printf(" ");
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

POJ 滑动窗口(优先队列的应用) 的相关文章

  • POJ滑动窗口

    题目描述 现在有一堆数字共N个数字 xff08 N lt 61 10 6 xff09 xff0c 以及一个大小为k的窗口 现在这个从左边开始向右滑动 xff0c 每次滑动一个单位 xff0c 求出每次滑动后窗口中的最大值和最小值 例如 xf
  • POJ 3764--The xor-longest Path---DFS + Trie(最大异或值)

    POJ 3764 The xor longest Path Time Limit 2000MS Memory Limit 65536K Description In an edge weighted tree the xor length
  • POJ 题目1239 ||ZOJ 题目 1499 Increasing Sequences(正反两次DP)

    Increasing Sequences Time Limit 1000MS Memory Limit 10000KTotal Submissions 3025 Accepted 1147 Description Given a strin
  • 时间序列(三)滑动窗口

    滑动窗口就是能够根据指定的单位长度来框住时间序列 xff0c 从而计算框内的统计指标 相当于一个长度指定的滑块在刻度尺上面滑动 xff0c 每滑动一个单位即可反馈滑块内的数据 span class hljs import span clas
  • poj 1068 parencondings

    题目描述 xff1a 定义 S 为一个合法的括号字符串 S 可以用以下两种方式编码 xff1a 1 用一个整数数组 P 来表示 xff0c 其中元素 p i 是 S 中每个 39 39 前的 39 39 的个数 xff1b 2 用一个整数数
  • poj 2513 colored sticks

    代码 include lt iostream gt include lt stdio h gt using namespace std define MAX 27 define S 500003 struct Node int id Nod
  • 汉诺塔问题(Hanoi)-python递归实现

    描述 描述 一 汉诺塔问题 有三根杆子A B C A杆上有N个 N gt 1 穿孔圆盘 盘的尺寸由下到上依次变小 要求按下列规则将所有圆盘移至C杆 每次只能移动一个圆盘 大盘不能叠在小盘上面 提示 可将圆盘临时置于B杆 也可将从A杆移出的圆
  • POJ--2709:Painter (贪心)

    1 题目源地址 http poj org problem id 2709 2 解题思路 每个颜料盒可能有3 12种颜色 其中每种颜色50ml 任意三种颜色 假设每种颜色Xml 可以混合出Xml的灰色 现在给出所需颜色的种数N 给出N个值分别
  • POJ 2479 Dual Core CPU|网络流|dinic模版

    问题描述 总时间限制 15000ms 单个测试点时间限制 5000ms 内存限制 65536kB 描述 As more and more computers are equipped with dual core CPU SetagLilb
  • poj 1330 Nearest Common Ancestors

    Problem poj org problem id 1330 vjudge net contest 80844 problem C Meaning 求最近公共祖先 Note 真 LCA 模版题 那就备份一发 LCA 模版 链式前向星存图
  • POJ--1159:Palindrome (DP求最长公共子序列)

    1 题目源地址 http poj org problem id 1159 2 题目大意 题目就是给你一个字符串 问你添加最少几个字符之后字符串变成回文字符串 求给出的字符串和逆序的字符串的最长公共子序列 用总长度减去这个最长公共子序列的长度
  • TCP中 滑动窗口RWND 和 拥塞窗口 CWND的区别

    滑动窗口RWND 和 拥塞窗口 CWND的区别 参考文章 What is CWND and RWND 文章如有错误 希望指正 共同学习 RWND Receiver Window 滑动窗口 滑动窗口技术是TCP的流量控制的核心 存在于TCP的
  • POJ 275 Drainage Ditches|网络流|dinic模版

    问题描述 总时间限制 1000ms内存限制 65536kB 描述 Every time it rains on Farmer John s fields a pond forms over Bessie s favorite clover
  • poj1240

    本题为已知M 叉树的前序遍历与后序遍历 要求给出对应树有多少种可能 与poj2255类似 只要划分出子树 就把问题规模缩小了 然后就可以递归 目前只会写递归 M叉树的前序遍历为 根 子树1 子树2 子树K K lt M M叉树的后序遍历为
  • LeetCode 热题 HOT 100:滑动窗口专题

    LeetCode 热题 HOT 100 https leetcode cn problem list 2cktkvj 文章目录 3 无重复字符的最长子串 128 最长连续序列 239 滑动窗口最大值 438 找到字符串中所有字母异位词 3
  • Knight Moves_dfs_2018_3_10

    A friend of you is doing research on the Traveling Knight Problem TKP where you are to find the shortest closed tour of
  • 【扩展KMP】POJ_3450| HDU_2328 Corporate Identity

    原题直通车 POJ 3450 Corporate Identity HDU 2328 Corporate Identity 题意概述 找出N个串中最长公共子串 分析 一 可以直接枚举其中一个串的所有字串 跟所有串进行匹配找到结果 二 用其中
  • 滑动窗口+前缀和-8--LC930.和相同的二元子数组

    class Solution object def numSubarraysWithSum self nums goal type nums List int type goal int rtype int 1 前缀和 presum 0 a
  • 华为OD机试 - 滑动窗口最大和 - 滑动窗口(Java 2023 B卷 100分)

    目录 专栏导读 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 专栏导读 本专栏收录于 华为OD机试 JAVA
  • poj1463

    1

随机推荐

  • 面向对象设计——系统动态模型设计(1,交互模型)

    在这张图中 xff0c 系统对象静态设计前边我们在分析中已经学习了 xff0c 这个阶段需要做的就是细化优化 这里我们主要学习系统设计 xff0c 这篇博客我们学习系统动态建模中交互模型建模 首先需要我们学习的是对象之间的通信 xff0c
  • 面向对象设计——系统动态模型设计(2,状态模型)

    这篇总结状态模型建模 xff1a 状态图和活动图 先看看状态图和活动图小结 xff1a 下边我们看一下 xff0c 状态图的事务 xff08 活动图的在前边的博客中已经给出 xff0c 活动图另一个大用处就是细化说明用例 xff09 xff
  • 【sql语句基础】——查(select)(单表查询)

    目录 查 select 单表查询基本语法表代码样例select注意事项 where子句排序order by子句合计 统计函数 count求和sum平均值avg最大值最小值max和min 分组group by过滤having 分页查询limi
  • 软件工程导论期末复习(一)

    本文用书 xff1a 软件工程导论 第六版 清华大学出版社 第一章 软件工程学概述 一 软件危机 1 什么是软件危机 xff1f 指在计算机软件开发和维护过程中所遇到的一系列严重问题 2 软件危机的典型表现 xff1a xff08 不怎么重
  • 软件工程导论期末复习(二)

    本文用书 xff1a 软件工程导论 第六版 清华大学出版社 1 可行性研究的目的是什么 xff1f 2 应从哪些方面研究可行性 xff1f 3 如何画系统流程图 xff1f 4 如何画数据流图 xff1f 5 了解数据字典及成本效益分析 第
  • 软件工程导论期末复习(三)

    本文用书 xff1a 软件工程导论 第六版 清华大学出版社 1 需求分析的基本任务是什么 xff1f 2 分析建模 2 1什么是模型 xff1f 模型 xff1a 就是为了理解事物而对事物做出的一种抽象 xff0c 是对事物的一种无歧义的书
  • 软件工程导论期末复习(四)

    本文用书 xff1a 软件工程导论 第六版 清华大学出版社 1 有穷状态机 2 peri网技术 第四章 形式化说明技术 4 1 概述 1 非形式化方法的缺点 用自然语言书写的系统规格说明书 可能存在矛盾 二义性 含糊性 不完整性及抽象层次混
  • 软件工程导论期末复习(五)

    本文用书 xff1a 软件工程导论 第六版 清华大学出版社 1 在设计过程中 xff0c 总体设计一般有哪两个主要阶段组成 xff1f 2 什么模块化 xff1f 模块独立性包含哪些内容 xff1f 度量准则是什么 xff1f 3 启发规则
  • 软件工程导论期末复习(六)

    本文用书 xff1a 软件工程导论 第六版 清华大学出版社 1 结构程序设计中有哪几种基本控制结构 xff1f 2 了解人机界面的设计 3 掌握过程设计的工具 xff08 程序流程图 盒图 PAD图 xff0c 判定树 xff09 4 面向
  • 技术人在互联网如何变现

    1 免费 xff08 引流的过程 xff09 免费的东西为什能够写到这里来 xff0c 天下哪有免费的午餐 xff0c 免费是实现流量聚集的手段 互联网无时无刻不体现免费的模式 xff0c 博客 各家文章平台 微博 公众号 短视频等等 xf
  • 软件工程导论期末复习(七)

    本文用书 xff1a 软件工程导论 第六版 清华大学出版社 1 编码 2 测试技术 3 调试的途径有哪些 xff1f 4 软件可靠性和可用性的基本概念 第七章 实现 7 1 编码 1 编码 xff1a 软件设计结果翻译成用某种程序语言书写的
  • 软件工程导论期末复习(八)

    本文用书 xff1a 软件工程导论 第六版 清华大学出版社 1 软件维护的定义 2 了解软件维护的特点 3 软件维护过程中维护组织包括哪些人员 xff1f 4 决定软件的可维护性的因素有哪些 xff1f 5 软件再工程过程 第八章 维护 8
  • 软件工程导论期末考试考后知识点总结

    感受 xff1a 大题多去做几道就可以 xff0c 难在记忆概念 xff0c 概念占篇幅近八成 xff0c 难受死了 第一章 1 软件危机的定义以及原因 2 软件工程的定义 3 软件工程方法学三要素 第二章 1 可行性研究的目的 2 数据流
  • linux操作--远程桌面RDP

    远程桌面RDP https www linuxidc com Linux 2018 10 155073 htm 相同的操作 xff1a https blog csdn net jgw2008 article details 80420180
  • Python工厂方法介绍及应用优化

    文章目录 前言一 工厂方法简单介绍1 统计信息2 简单实现 二 进一步优化具体实现1 抽象类及具体类部分2 工厂方法的封装3 用户调用接口 总结 前言 本文简单介绍设计模式中的工厂方法的实现方式及应用 文中所引用的模块及需要注意的事项 xf
  • Anaconda3 手动配置环境变量

    问题描述 Win 43 r 键打开系统运行对话框 xff0c 输入 cmd 回车 输入conda xff0c 显示 xff1a conda 不是内部或外部命令 xff0c 也不是可运行的程序或批处理文件 主要是因为安装 anaconda 时
  • xrdp_mm_process_login_response:login failed

    题外话 xff1a 被这个问题困扰了一个多钟 xff0c 百度搜索真的真的不如谷歌搜索 xff0c 最后是使用谷歌搜索一下子就找到适合自己的right answer xff01 问题描述 xff1a win10下远程桌面连接ubuntu服务
  • 使用SQl创建表单。查询,增加,修改删除,数据。

    使用SQl创建表单 查询 xff0c 增加 xff0c 修改删除 xff0c 数据 打开SQl数据库 右键数据库新建数据库 弹出新建数据库 xff0c 给数据库命名 左侧可以找到刚刚创建的数据库 选择刚刚创建滴数据库 xff0c 右键 表
  • Linux远程控制之VNC (server ,viewer)安装教程 || chkconfig

    VNC 可以实现对另外的计算机的操作 xff1a A xff1a 可以访问另一个计算机 xff0c 采用命令终端 或者窗口界面 B xff1a 可以远程控制另一个计算机 xff0c 两台同步显示操作 首先 xff0c 没有readme所说的
  • POJ 滑动窗口(优先队列的应用)

    数据结构与算法A 第三章 栈与队列 练习题 滑动窗口 思路 对于最大最小值分别维护一个优先队列 xff08 保存元素下标 xff09 以最小值为例 每次遇到一个新元素 xff0c 从队尾插入 插入时删去队列中比该值大的元素 xff08 因为