Educational Codeforces Round 87 (Rated for Div. 2)D.Multiset 卡内存的修改数组

news2024/11/28 14:32:51

Problem - 1354D - Codeforces

我被卡了:

这道题看到multiset我还真写multiset,结果内存超限。

当然能想到想同的数存到一块,所以用了map,结果还超,诶呦:

set肯定比map大滴,这里可能刚超就结束了,事实上可能占用更大。

思路:

本题是得用树状数组或者线段树存出现次数做,而且内存足够多。

我是用的类构造的线段树。

初始一个1e6的数组,构造里有1e6的这个数组和树状数组,比3e6大,粗算一下吧,4e6 * 4字节 = 16e6 ,也就是16MB,也不超28MB。

————

存出现次数,树状数组记录的前缀和,所以可以二分找到第几个数。

代码:

这个类板子就是我的树状数组1

template<class T>
class BIT//Binary Indexed Tree
{
public:
	ll n;//a的大小
	vector<T>a;//原数组
	vector<T>c;//树状数组
	ll lowbit(ll a)
	{
		return a & -a;
	}
	T getsum(ll i)
	{
		T sum = 0;
		while (i > 0)
		{
			sum += c[i];
			i -= lowbit(i);
		}
		return sum;
	}
	void add(ll i, T v)
	{
		while (i <= n)
		{
			c[i] += v;
			i = i + lowbit(i);
		}
	}
	BIT(vector<T>_a)
	{
		a = _a;
		n = a.size() - 1;
		c = vector<T>(n + 1);
		//直接把树建好
		for (ll i = 1; i <= n; i++)
		{
			add(i, a[i]);
		}
	}
};

void solve(int casen)
{
	int n, m;
	cin >> n >> m;
	vector<int>arr(1000002);
	BIT<int> demo(arr);
	for (int i = 1; i <= n; i++)
	{
		int tmp;
		cin >> tmp;
		demo.add(tmp, 1);
	}


	for (int i = 1; i <= m; i++)
	{
		int tmp;
		cin >> tmp;
		if (tmp < 0)
		{
			tmp = -tmp;
			//二分找第tmp个
			int l = 1, r = 1000000;
			while (l < r)
			{
				int mid = l + (r - l) / 2;
				if (demo.getsum(mid) >= tmp)
					r = mid;
				else
					l = mid + 1;
			}
			demo.add(l, -1);//有人给tmp减
		}
		else
		{
			demo.add(tmp, 1);
		}
	}
	int l = 1, r = 1000000;
	if (demo.getsum(1000000) == 0)
	{
		cout << 0;
		return;
	}

	while (l < r)
	{
		int mid = l + (r - l) / 2;
		if (demo.getsum(mid) > 0)
		{
			r = mid;
		}
		else
			l = mid + 1;
	}
	cout << l;

}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t = 1;
	//cin >> t;
	for (int i = 1; i <= t; i++)
	{
		solve(i);
	}
	return 0;
}

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

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

相关文章

C++实现鼠标点击和获取鼠标位置(编译环境visual studio 2022)

1环境说明 2获取鼠标位置的接口 void GetMouseCurPoint() {POINT mypoint;for (int i 0; i < 100; i){GetCursorPos(&mypoint);//获取鼠标当前所在位置printf("% ld, % ld \n", mypoint.x, mypoint.y);Sleep(1000);} } 3操作鼠标左键和右键的接口 void Mo…

npm---设置淘宝镜像时报“certificate has expired“的错误

今天使用vue create my-app 创建项目时&#xff0c;竟然报错&#xff1a; Error: Command failed: npm info vue-cli-version-marker --json --registryhttps://registry.npm.taobao.org npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request t…

JavaSE习题 青蛙跳台阶问题

题目&#xff1a; 一只青蛙一次可以跳上 1 级台阶&#xff0c;也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。 题目分析&#xff1a; 如下图所示&#xff0c;当只有一阶台阶时&#xff0c;青蛙只有一种跳法。当只有两阶台阶时&#xff0c;青蛙有两种算法&…

「Kafka」消费者篇

「Kafka」消费者篇 Kafka 消费方式 Kafka 消费者工作流程 消费者总体工作流程 新版本&#xff08;0.9之后&#xff09;的 offset 保存在 kafka 的 Topic 里&#xff0c;持久化到磁盘&#xff0c;可靠性有保障。 老版本&#xff08;0.9之前&#xff09;的 offset 保存在 Zook…

arcpy高德爬取路况信息数据json转shp

最近工作上遇到爬取的高德路况信息数据需要在地图上展示出来&#xff0c;由于json数据不具备直接可视化的能力&#xff0c;又联想到前两个月学习了一点点arcpy的知识&#xff0c;就花了一些时间去写了个代码&#xff0c;毕竟手动处理要了老命了。 1、json文件解读 json文件显…

【Python之Git使用教程001】Git简介与安装

一、简介 Git其实就是一个分布式版本的控制系统&#xff0c;在分布式版本的控制系统&#xff0c;大家都拥有一个完整的版本库&#xff0c;不需要联网也可以提交修改&#xff0c;所以中心服务器就显得不那么重要。由于大家都拥有一个完整的版本库&#xff0c;所有只需要把各自的…

Matplotlib热力图的创意绘制指南【第54篇—python:Matplotlib热力图】

文章目录 Matplotlib热力图的创意绘制指南1. 简介2. 基本热力图3. 自定义颜色映射4. 添加注释5. 不同形状的热力图6. 分块热力图7. 多子图热力图8. 3D热力图9. 高级颜色映射与颜色栏设置10. 热力图的动态展示11. 热力图的交互性12. 标准化数据范围13. 导出热力图 总结&#xff…

【C++】- 继承(继承定义!!基本格式!切片概念!!菱形继承详解!)

继承 了解继承继承的定义基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数继承和友元菱形继承和菱形虚拟继承 了解继承 继承机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&a…

【lesson10】高并发内存池细节优化

文章目录 大于256KB的大块内存申请问题大于256KB的大块释放申请问题使用定长内存池脱离使用new释放对象时优化为不传对象大小完整版代码Common.hObjectPool.hThreadCache.hThreadCache.cppConcurrentAlloc.hCentralCache.hCentralCache.cppPageCache.hPageCache.cpp 大于256KB的…

centos 7.7 离线安装docker

centos 7.7 离线安装docker Index of linux/static/stable/x86_64/https://download.docker.com/linux/static/stable/x86_64/ 【1】离线下载docker 压缩包上传至 /usr/local 目录&#xff0c;解压缩&#xff0c;并复制到 /usr/bin/ 目录中。 cd /usr/local/tar -zxvf docke…

C++:CSDN云服务器3.0

废话一会儿 终于&#xff0c;CSDN云服务器又更了 事情是这样的&#xff1a; 我的一个室友&#xff0c;知道了我的CSDN云服务器&#xff0c;觉得感兴趣&#xff0c;就让我开发一个3.0版本的。我媜了好久好久&#xff0c;搞出来个怪名堂&#xff0c;刷块刷得不行。他表示这简直…

List的模拟实现 迭代器

———————————————————— list与vector相比&#xff0c;插入、删除等操作实现的成本非常低&#xff0c;如果在C语言阶段熟悉理解过链表&#xff0c;那么现在实现起来list就显得比较简单&#xff0c;可以说操作层面上比vector更简洁&#xff0c;因为list没有扩…

Leetcode—38. 外观数列【中等】

2024每日刷题&#xff08;111&#xff09; Leetcode—38. 外观数列 实现代码 class Solution { public:string countAndSay(int n) {string ans "1";while(--n) {string next;for(int i 0; i < ans.size(); i) {int cnt 1;char c ans[i];while(i 1 < an…

platfrom tree架构下实现3-Wire驱动(DS1302)

目录 概述 1 认识DS1302 1.1 DS1302 硬件电路 1.2 操作DS1302 1.3 注意要点 2 IO引脚位置 3 添加驱动节点 3.1 更新内核.dts 3.2 更新板卡.dtb 4 驱动程序实现 4.1 编写驱动程序 4.2 编写驱动程序的Makefile 4.3 安装驱动程序 5 验证驱动程序 5.1 编写测试程序…

机器学习数据预处理--连续变量分箱

文章目录 原理概念等宽分箱等频分箱聚类分箱有监督分箱 原理概念 连续变量分箱即对连续型字段进行离散化处理&#xff0c;也就是将连续型字段转化为离散型字段。连续字段的离散过程如下所示&#xff1a; 连续变量的离散过程也可以理解为连续变量取值的重新编码过程&#xff0c…

Qt环境搭建+简单程序实现

Qt是什么 Qt是一个跨平台的C图形用户界面应用程序框架。 框架的本质就是一群大佬发明的让菜鸡写出来的代码也也比较规范 也就是限制程序员的自由&#xff0c;让程序员写出来的代码规范。 库和框架有相似性。 库是被程序员调用的&#xff0c;&#xff08;程序员是主体&…

PyTorch 2.2 中文官方教程(二)

在 YouTube 上介绍 PyTorch PyTorch 介绍 - YouTube 系列 原文&#xff1a;pytorch.org/tutorials/beginner/introyt.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 介绍 || 张量 || 自动微分 || 构建模型 || TensorBoard 支持 || 训练模型 || 模型理解 作者&a…

05 - python操作JSON

JSON认识 JSON&#xff0c;一种轻量级的文本数据交换格式&#xff0c;比XML更小更快&#xff0c;更易解析&#xff0c;爬虫经常要获取接口数据&#xff0c;接口数据就是JSON格式的。 格式示例 # 格式1&#xff1a;JSON 对象 {"name": "李嘉图", "a…

pytorch索引和切片

目录 1. 按索引方式取数据2. 以python切片方式取数据3. 指定index取数据4. ...代表除其前后指定维度外的所有维度5. masked_select() 使用掩码选择元素6. take 矩阵打平后选取 1. 按索引方式取数据 a[0,0,2,4] 其中0&#xff0c;0&#xff0c;2&#xff0c;4是索引从0开始 2. …

3.0 Hadoop 概念

本章着重介绍 Hadoop 中的概念和组成部分&#xff0c;属于理论章节。如果你比较着急可以跳过。但作者不建议跳过&#xff0c;因为它与后面的章节息息相关。 Hadoop 整体设计 Hadoop 框架是用于计算机集群大数据处理的框架&#xff0c;所以它必须是一个可以部署在多台计算机上…