P1886 滑动窗口 /【模板】单调队列

题目:

P1091 [NOIP2004 提高组] 合唱队形 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

n 位同学站成一排,音乐老师要请其中的 �−�n−k 位同学出列,使得剩下的 �k 位同学排成合唱队形。

合唱队形是指这样的一种队形:设 �k 位同学从左到右依次编号为 1,2,1,2, … ,�,k,他们的身高分别为 �1,�2,t1​,t2​, … ,��,tk​,则他们的身高满足 �1<⋯<��>��+1>t1​<⋯<ti​>ti+1​> … >��(1≤�≤�)>tk​(1≤i≤k)。

你的任务是,已知所有 �n 位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入格式

共二行。

第一行是一个整数 �n(2≤�≤1002≤n≤100),表示同学的总数。

第二行有 �n 个整数,用空格分隔,第 �i 个整数 ��ti​(130≤��≤230130≤ti​≤230)是第 �i 位同学的身高(厘米)。

输出格式

一个整数,最少需要几位同学出列。

输入输出样例

输入 #1复制

8
186 186 150 200 160 130 197 220

输出 #1复制

4

说明/提示

对于 50%50% 的数据,保证有 �≤20n≤20。

对于全部的数据,保证有 �≤100n≤100。

思路:

单调队列。

1.用数组模仿队列,dp[h]表示单调队列的头,dp[t]表示单调队列的尾。

2.队列只会存储可能成为k个数据中的最小值和最大值的下标(掠过的数据从队头出,比刚入队小(或者大)的数据从队尾出(不可能成为最大或者最小,没必要记录下来,dp中只会存储可能成为k个数据中的最小值和最大值的下标)

3.注意:因为是用数组dp模拟队列,所以2中的出并非真的将其从数组中踢出,而是借助头尾指针h,t的移动表示出。只有h,t之间的数据才表示单调队列里的数据。

代码:

//单调队列
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const ll N = 1000010;
int a[N], dp[N];
int main()
{ll n, k,i;cin >> n >> k;for (i = 1; i <= n; i++)scanf("%d", &a[i]);//维持窗口的最小值int h = 1, t = 0;//清空队列for (i = 1; i <= n; i++) {while (h <= t && a[dp[t]] >= a[i])t--;//尾出dp[++t] = i;//尾进(dp[]储存的是a[i]的下标i)if (dp[h] < i - k + 1)h++;//头出if (i >= k)cout << a[dp[h]]<<" ";//输出最小}cout << endl;//维持窗口的最大值h = 1, t = 0;//清空队列for (i = 1; i <= n; i++) {while (h <= t && a[dp[t]] <= a[i])t--;//尾出dp[++t] = i;//尾进(dp[]储存的是a[i]的下标i)if (dp[h] < i - k + 1)h++;//头出if (i >= k)cout << a[dp[h]] << " ";//输出最大}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/102384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创新学习方式,电大搜题助您迈向成功之路

近年来&#xff0c;随着信息技术的发展&#xff0c;互联网在教育领域发挥的作用越来越显著。贵州开放大学作为国内首家电视大学&#xff0c;一直致力于创新教学模式&#xff0c;帮助学生更好地获取知识。在学习过程中&#xff0c;学生常常遇到疑难问题&#xff0c;而解决这些问…

Linux内存管理 (2):memblock 子系统的建立

前一篇&#xff1a;Linux内存管理 (1)&#xff1a;内核镜像映射临时页表的建立 文章目录 1. 前言2. 分析背景3. memblock 简介3.1 memblock 数据结构3.2 memblock 接口 4. memblock 的构建过程 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者…

26、类型别名

类型别名 顾名思义&#xff0c;其实就是类型类型起别名&#xff08;新起一个名字&#xff09; demo&#xff1a; type Name string; type NameConsole () > string; type NameUnite Name | NameConsole; function getName(n: NameUnite): Name {if( typeof n string)…

vue3+ts项目03 element-plus、vue-router、pinia

yarn add element-plus yarn add element-plus/icons-vue修改main.ts import { createApp } from vue import App from ./App.vueimport ElementPlus from element-plus import element-plus/dist/index.css import zhCn from element-plus/dist/locale/zh-cn.mjsconst app c…

Mac上brew切换国内源【极简方案】

前言 下载一些开源包如telnet时&#xff0c;通过brew下载经常由于网络不通&#xff0c;导致下载失败。所以mac用户最好一次性设置brew为国内源。 方案 极简四步&#xff0c;换Homebrew的镜像源为阿里云镜像&#xff0c;依次在终端执行以下几步&#xff1a; 1、cd “$(brew …

【MySQL】MySQL分区表详解

原创不易&#xff0c;注重版权。转载请注明原作者和原文链接 文章目录 分区表介绍表分区的优缺点和限制 分区适用场景分区方式分区策略RANGE 分区LIST 分区HASH 分区KEY 分区COLUMNS 分区 常见分区命令是否支持分区创建分区表向分区表添加新的分区删除指定的分区重新组织分区合…

#力扣:344. 反转字符串@FDDLC

344. 反转字符串 一、Java class Solution {public void reverseString(char[] s) {for (int l 0, r s.length - 1; l < r; l, r--) {s[l] ^ s[r];s[r] ^ s[l];s[l] ^ s[r];}} } 二、C #include <vector> using namespace std; class Solution { public:void re…

vue七牛云视频直传

完成后样式&#xff1a; 下面的代码是我自己项目里面用到的&#xff0c;一些判断看自己情况去掉&#xff0c;用的是element-ui组件 安装 uuid 库。你可以使用 npm 或 yarn 来完成安装。在终端中执行以下命令&#xff1a; npm install uuidhtml部分 <el-upload class&quo…

【python】time

文章目录 【calendar】是否闰年星期英文缩写今天星期几打印日历 【datetime】今天星期几 【time】当前时间 【pandas】当前时间文件修改的时间 【日历】 【calendar】 是否闰年 import calendar print(calendar.isleap(2000))out True星期英文缩写 print(calendar.weekhead…

TCP/IP(十三)滑动窗口

一 滑动窗口 通信双方要读懂对方的反馈信息,并进行调整 TCP滑动窗口原理终于清楚了 TCP Window Full 和 TCP Zero Window "特殊的场景" 1、TCP Window Full 是站在发送端角度说的特点&#xff1a; 表示发送端不能再发数据给对方,除非发送的数据包得到ACK响应2、…

SSM - Springboot - MyBatis-Plus 全栈体系(二十四)

第五章 SSM 二、SSM 整合配置实战 1. 依赖整合添加 1.1 数据库准备 依然沿用 mybatis 数据库测试脚本&#xff01; CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIM…

谷歌云 | 零售行业的生成式 AI:如何跟上步伐并取得领先

【Cloud Ace 是 Google Cloud 全球战略合作伙伴&#xff0c;在亚太地区、欧洲、南北美洲和非洲拥有二十多个办公室。Cloud Ace 在谷歌专业领域认证及专业知识目前排名全球第一位&#xff0c;并连续多次获得 Google Cloud 各类奖项。作为谷歌云托管服务商&#xff0c;我们提供谷…

基于 ACK Fluid 的混合云优化数据访问(四):将第三方存储目录挂载到 Kubernetes,提升效率和标准化

作者&#xff1a;车漾 前文回顾&#xff1a; 本系列将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景&#xff0c;相关文章请参考&#xff1a; -基于 ACK Fluid 的混合云优化数据访问&#xff08;一&#xff09;&#xff1a;场景与架构 -基于 ACK Fluid 的混合云优…

JavaScript的懒加载处理

&#x1f618;博主&#xff1a;小猫娃来啦 &#x1f618;文章核心&#xff1a;JavaScript的懒加载处理 文章目录 什么是懒加载实现懒加载的方式js四步法设置占位图监听滚动事件加载图片触发加载函数 什么是懒加载 懒加载&#xff08;Lazy Loading&#xff09;是一种优化技术&a…

经典面试题第十二更---valueOf和toString

前言&#xff1a; &#x1f921; 作者简介&#xff1a;我是Morning&#xff0c;计算机的打工人&#xff0c;想要翻身做主人 &#x1f648; &#x1f648; &#x1f648; &#x1f3e0; 个人主页&#xff1a; Morning的主页 &#x1f4d5;系列专栏&#xff1a; 前端…

【opencv】windows10下opencv4.8.0-cuda C++版本源码编译教程

【opencv】windows10下opencv4.8.0-cuda C版本源码编译教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【opencv】windows10下opencv4.8.0-cuda C版本源码编译教程前言准备工具cuda/cudnncmakeopencv4.8.0opencv_contrib CMake编译VS2019编…

文心一言 VS 讯飞星火 VS chatgpt (111)-- 算法导论10.2 2题

二、用go语言&#xff0c;用一个单链表 L实现一个栈。要求操作 PUSH和 POP 的运行时间仍为 O(1)。 文心一言&#xff1a; 在 Go 语言中&#xff0c;我们可以用结构体来实现一个单链表&#xff0c;然后再用栈的相关操作。 以下是一个可能的实现方式&#xff1a; package mai…

碰撞检测算法——分离轴算法在Unity中实现(二)

一、介绍 分离轴算法&#xff08;简称SAT&#xff09;通常用于检查两个简单多边形&#xff08;凸边形&#xff09;之间或多边形与圆之间的碰撞。本质上&#xff0c;如果您能够绘制一条线来分隔两个多边形&#xff0c;则它们不会发生碰撞&#xff0c;如果找不到一条线来分割两个…

力扣:129. 求根节点到叶节点数字之和(Python3)

题目&#xff1a; 给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字&#xff1a; 例如&#xff0c;从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。 计算从根节点到叶节点生成的 所…

《概念解析》内容汇总 + 导航

本目录基于《概念解析》专栏已发布的文章分类整理生成,包含无线感知、计算机视觉、深度学习等多个技术主题。 该专栏旨在结合前沿论文,为读者提供无线感知、人工智能(AI)、信号处理等领域相关概念的简明扼要的解释和介绍,致力于简洁清晰地解释、辨析复杂而专业的概念。通过对专…