Cow Lineup S——离散化、单调队列、双指针

news2024/12/26 9:25:30

题目描述

思路

  • x、id不大于1亿,数据量太大,使用离散化
  • 将id离散化成一串从1开始连续的编号,使用map集合进行离散化
  • 使用双指针维护一段区间,这段区间满足每个编号都包含

如何使用map集合进行离散化?

  • 维护一个变量nums,从1开始,每个编号的牛第一次被遍历的时候将nums作为新的编号,nums++
  • 使用map集合判断这个牛的编号是不是第一次遍历, key值表示原编号,value表示新的编号
  • 用一个结构体存储牛的信息:位置和编号,按位置进行排序,并且进行离散化的时候,将编号进行更新
  • 定义一个队列,队列中存储每头牛的信息,将新的牛从队尾插入,并且记录这头牛的编号是否是第一次入列,当每个编号的牛都入列了,当前区间满足条件,进行比较
  • 当最后一头牛入列并且队头存储的牛的编号只有一种时,退出循环

代码实现

#include <iostream>
#include <map>
#include <algorithm>

using namespace std;

const int N = 50010;
map<int, int> a;	// 将ID编号离散化成一串连续的编号
int c[N];	// 下标为编号,出现了多少次
int nums;	// 牛的种类
int n;

struct node
{
	int x, id;
}niu[N], q[N];	// niu表示每头牛的信息:位置和编号	
				// q表示队列,存储牛的信息

bool cmp(node a, node b)
{
	return a.x < b.x;
}

int main()
{
	cin >> n;
	for(int i = 0;i < n;i ++)
	{
		int id;
		cin >> niu[i].x >> id;
		if(!a.count(id))	// 如果当前编号没有出现过,牛的种类加1
		{
			nums++;
			a[id] = nums;
		}
		niu[i].id = a[id]; // 将编号更新成新的编号
	}
	sort(niu, niu + n, cmp);	// 按位置进行排序
	int hh = 0, tt = 0;	// hh队头、tt队尾
	int res = 0;	// 表示当前队列中有多少不同编号的牛
	q[tt] = {niu[0].x, niu[0].id};	// 先将第一头牛的信息加入到队列中
	res++;
	int ress = 0x3f3f3f3f;	// 满足条件的区间长度(是牛的位置距离)
	c[niu[0].id]++;	// 记录每个编号出现的次数
	while(hh <= tt)
	{
		while(c[q[hh].id] > 1)	// 判断队头,如果队头在队列中重复了,那么将队头弹出,
            					// 并且减少队头编号的数量,保证队列中满足条件并且位置距离最短
		{
			c[q[hh].id]--;
			hh++;
		}
		if(res == nums)	// 当前队列满足条件,比较位置距离
		{
			ress = min(ress, q[tt].x - q[hh].x);
		}
		if(tt == n-1) break;	// 如果最后一头牛已经入队了,并且队头没有牛可以弹出了,循环结束
        // 将新的牛加入到队尾中,并且判断这个牛的编号是不是第一次出现
		q[++tt] = {niu[tt].x, niu[tt].id};
		if(c[niu[tt].id] == 0) res++;
		c[niu[tt].id]++;
	}
	cout << ress << endl;
	
	return 0;
}

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

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

相关文章

在Linux上安装Oracle 数据库 11g (含静默方式安装)

好久没碰11g了&#xff0c;今天&#xff08;2023年11月16日&#xff09;因为有个需求又装了一遍。 在OCI上安装了一个Oracle Linux 6实例&#xff1a; $ uname -a Linux instance-20231116-1239-db11g 4.1.12-124.80.1.el6uek.x86_64 #2 SMP Mon Oct 9 02:32:10 PDT 2023 x86…

Springboot升级为3.0.6

版本升级 Springboot升级为3.0.6 版本从原来的2.7.12换成了3.0.6 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.6</version><relativePath/> <…

使用宝塔面板安装mysql

1.第一步 在官网https://www.bt.cn/new/download.html下载页面直接在服务器控制面板复制这里的代码下载即可 2.第二步 下载好后按照服务器面版上有个公网地址&#xff0c;含有用户名和密码&#xff0c;保存好&#xff0c;然后通过公网地址打开一个网页&#xff0c;绑定自己注册…

【数据结构与算法】JavaScript实现双向链表

文章目录 一、双向链表简介二、封装双向链表类2.0.创建双向链表类2.1.append(element)2.2.toString()汇总2.3.insert(position,element)2.4.get(position)2.5.indexOf(element)2.7.update(position,element)2.8.removeAt(position)2.9.其他方法2.10.完整实现 三、链表结构总结3…

苍穹外卖--新增员工

请求方式Post,请求参数&#xff1a; 用EmployeeDTO类接收参数 Controller层实现&#xff1a; PostMappingpublic Result save(RequestBody EmployeeDTO employeeDTO){employeeService.save(employeeDTO);return Result.success();}service层实现&#xff1a; Overridepublic …

国家大基金三期线上金融正式倒计时!11月17日,共启芯片产业新篇章

国家大基金三期线上金融正式倒计时&#xff01;11月17日&#xff0c;共启芯片产业新篇章 新时代浪潮下&#xff0c;全球化进程不断推动各科技大国的核心发展&#xff0c;芯片作为强有力的竞争标志&#xff0c;是国与国之间的重要技术战争焦点。同时&#xff0c;国内基金发展势…

数字艺术藏品软件的独特创新与未来趋势

随着科技的飞速发展&#xff0c;数字艺术藏品软件逐渐崭露头角&#xff0c;为艺术爱好者们提供了一个全新的收藏方式。这类软件不仅为艺术家提供了展示作品的平台&#xff0c;也为收藏家们提供了收藏和分享艺术品的渠道。本文将从开发思路、技术实现、市场前景等方面探讨数字艺…

TP_Link WR886N 硬改闪存16M内存64M,刷入openwrt

一、换内存&#xff0c;拆闪存&#xff1a; 1、先原机开机试试是否功能正常&#xff1b; 2、拆机&#xff0c;比较难拆&#xff0c;容易坏外壳&#xff1b; 3、找到内存和闪存&#xff0c;用胶带把边上的小元件&#xff0c;电阻都贴好&#xff1b; 4、加助焊油&#xff0c;用风…

IPSec:strongswan -- IKEv2如何检测到经过了nat设备

拓扑 其中NAT设备将来自DUTA的报文源IP 101.0.0.2转换为102.0.0.2。DUTA发起IPSec连接。 DUTA计算natd_chunk和natd_hash DUTA先用自己的SPI&#xff0c;对等体的SPI&#xff08;为0&#xff09;&#xff0c;IP和端口号做SHA1处理。如下图&#xff1a; 代码位于ike_natd.c的函…

【论文解读】CP-SLAM: Collaborative Neural Point-based SLAM System_神经点云协同SLAM系统(上)

目录 1 Abstract 2 Related Work 2.1 单一智能体视觉SLAM&#xff08;Single-agent Visual SLAM&#xff09; 2.2 协同视觉SLAM&#xff08;Collaborative Visual SLAM&#xff09; 2.3 神经隐式表示&#xff08;Neural Implicit Representation&#xff09; 3 Method 3.…

欧科云链研究院:DeFi 将要纳税?美国国税局召开听证会

出品&#xff5c;欧科云链研究院 作者&#xff5c;Matthew Lee 北京时间 11月15日&#xff0c;美国国税局&#xff08;IRS&#xff09;召开了一场备受瞩目的听证会&#xff0c;讨论扩大加密货币资产的征税范围。此次听证会囊括了诸多关键议题&#xff0c;包括用户隐私、必须报…

【数据结构】树与二叉树(十八):树的存储结构——Father链接结构、儿子链表链接结构

文章目录 5.1 树的基本概念5.1.1 树的定义5.1.2 森林的定义5.1.3 树的术语 5.2 二叉树5.3 树5.3.1 树的存储结构1. 理论基础2. 典型实例 5.3.2 Father链接结构a. 定义树节点结构b. 创建新节点c. 主函数d. 代码整合 5.3.3 儿子链表链接结构a. 定义树节点结构b. 创建新节点c. 添加…

DOORS和Reqtify—需求管理和需求追溯工具

产品概述 IBM Rational DOORS可实现对整个产品的全生命周期需求管理&#xff0c;覆盖从需求、到设计以及测试阶段&#xff0c;是一款被广泛使用的企业级专业需求管理工具。DOORS可以将项目开发过程中产生的各级需求和与需求相关的文件、网址URL进行链接管理&#xff0c;同时能够…

微信小程序Error: ENOENT: no such file

问题描述 当编译的时候 会提示找不到这个文件&#xff08;index&#xff09;&#xff0c;但是确信项目目录里已经删除了该页面路径&#xff0c;并且app.json的pages列表中也 导致这个问题应该是&#xff1a;新添加了文件&#xff0c;后面删除了或者修改了文件名&#xff0c;导…

Vue3.0和2.0语法不同分析

前言&#xff1a;本篇文章只做VUE3.0和VUE2.0语法上的不同分析&#xff0c;不做性能和源码架构等的分析。 一、VUE3.0和VUE2.0代码结构不同 VUE3.0代码实例 <template><div><span>count is {{ count }}</span><span>plusOne is {{ plusOne }}…

AH8691-60V降压至3.3V电源芯片:ESOP8封装解决方案

AH8691-60V降压至3.3V电源芯片&#xff1a;ESOP8封装解决方案 随着电子设备的日益普及&#xff0c;电源管理芯片的重要性也日益凸显。一款高效率、低功耗的电源芯片可以大大提高电子设备的性能和可靠性。今天&#xff0c;我们将介绍一款60V降压至3.3V电源芯片&#xff0c;采用…

c++递归分析出依赖的头文件

我想使用boost::optional&#xff0c;但boost库太大&#xff0c;添加到git时比较费劲。 怎样分析出boost/optional.hpp依赖的头文件&#xff0c;然后精准地添加到git上呢&#xff1f; 使用g就可以了&#xff0c;步骤如下 进入目录boost_1_78_0/boost执行 g -MM -H optional.hp…

04-快速掌握Redis,了解Redis中常见的结构类型及其应用场景

Redis快速入门 Remote Dctionary Server Redis是用C语言开发的一个开源的、基于内存的(高性能)键值对(key-value)结构化NoSql数据库,每秒内查询次数可以达到100000的QPS 键值型: Redis中存储的数据都是以key、value对的形式存储&#xff0c;而value的形式多种多样(如字符串、…

低代码,让我效率提升了80%

目录 ​编辑 一、前言 二、优势 三、主要功能点 四、低代码归根结底差不多 五、小结 一、前言 低代码开发平台&#xff0c;一个号称能在几分钟的时间里开发出一套公司内部都可使用的应用系统开发工具。很多人或许都隐隐听说过低代码&#xff0c;因为低代码不仅远名国外&#xf…

003 OpenCV filter2D

目录 一、环境 二、图像卷积 三、代码演示 3.1、锐化 3.2、sobel边缘&#xff0c;x方向 3.3、sobel边缘&#xff0c;y方向 3.4、高斯模糊 3.5、完整代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、图像卷积 在OpenCV…