首页 > 其他分享 >未出现的最小非负整数(MEX)

未出现的最小非负整数(MEX)

时间:2023-11-29 12:11:22浏览次数:35  
标签:insert cnt mulst 非负 int void 整数 st MEX

典题合集

前置芝士

[Set做法]

struct Mex {//自定义N的大小
	int cnt[N];//cnt(i)表示数字i出现的次数
	set<int> st;//记录未出现的数字
	multiset<int> mulst;//记录出现过的数字
	Mex() {
		for (int i = 0; i < N; ++i) cnt[i] = 0;
		for (int i = 0; i < N; ++i) st.insert(i);
	}
	void add(int x) {
		//第一次添加
		if (cnt[x] == 0) {
			st.erase(x);
		}
		++cnt[x];
		mulst.insert(x);
	}
	void del(int x) {
		//只剩一个了
		if (cnt[x] == 1) {
			st.insert(x);
		}
		--cnt[x];
		//不能写成mulst.erase(x) 这样是删除所有值为x的元素
		mulst.erase(mulst.find(x));
	}
	int get_mx() {
		return *st.begin();
	}
	void clear() {
		while (!mulst.empty()) {
			del(*mulst.begin());
		}
	}
};

标签:insert,cnt,mulst,非负,int,void,整数,st,MEX
From: https://www.cnblogs.com/taotao123456/p/17864522.html

相关文章

  • ABC330 E Mex and Update 题解
    LinkABC330EMexandUpdateQuestion给一个数组\(a\),有\(Q\)次修改每次把\(a_i\)改成\(x\)问每次修改后,不在\(a\)数组中的最小非负数时多少Solution记录每个\(a_i\)出现的次数\(num\)每个修改操作可以看成时先删除,后添加用set维护为\(num_x=0\)的\(x\)......
  • Caused by: io.debezium.DebeziumException: java.sql.SQLSyntaxErrorException: Acce
    1.情景展示如上图所示:在使用debezium读取mysql数据操作日志时(io.debezium.connector.mysql.MySqlConnector),报错:Causedby:io.debezium.DebeziumException:java.sql.SQLSyntaxErrorException:Accessdenied;youneed(atleastoneof)theRELOADprivilege(s)forthis......
  • 带修区间mex
    1xy把x改成y.2xy询问区间[x,y]的mex.part0polylog做法考虑整体二分,那就转换成了.保留权值[vl,vr)的数,带修区间数颜色数(是否全部出现过<=>颜色数=vr-vl).这个问题可以直接cdq.复杂度O(nlog^3n).part1考虑分块不难做到.O(1)单点修改(只往小了改).O(sqrtn)寻......
  • 生成6位随机正整数
    使用Random生成随机数publicstaticStringgetStringRandom(){Randomrandom=newRandom();Stringstr=String.valueOf(random.nextInt(9));for(inti=0;i<5;i++){str+=random.nextInt(9);}returnstr;}使用Math生成随机数......
  • Sumsets(UVA10125)整数集合
    备课的时候发现了这道题,对于初识哈希来说并不算一道很简单的题。在查阅林厚从老师的示例代码与往届OI选手的博客后,大致理解了本题的思路。相关标签:Hash跳转至本题Description给定一个整数集合S,求一个最大的d,满足a+b+c=d,其中a,b,c,d∈SInput多组数据,每组数据包括:第一行一......
  • 001反转一个3位整数
    1.问题描述反转一个只有3位数的整数。2.示例输入num=123,输出321,输入num=100,输出1. 3.代码示例3.1python1classSolution:2defreverseInt(self,num):3ifisinstance(num,int)andnum<999andnum>99:4hundreds=int(num/1......
  • 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整
    示例:给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]用数组的indexOf()方法来查找值vartowSum=function(nums,target){for(leti=0,len=nums.length;i<len;i++){if(nums.indexOf(target-nums[i])>-1......
  • 算法~让整数从指定范围开始
    题目有个需求,我有4种类型,每种类型又有自己的数列,问我如何用一个数字来表示它们思路可以看一下java里的线程的实现,它是将一个int64的数字进行分区,每个区间代表一种状态,如运行中,挂起,暂停等,我们也可以通过这个方法来实现。实现在int32中,我找一个范围,存储我的运行中状态的数列,为......
  • 代码随想训练营第三十九天(Python)| 62.不同路径、63. 不同路径 II、343. 整数拆分
    62.不同路径classSolution:defuniquePaths(self,m:int,n:int)->int:#dp[i][j]代表到达dp[i][j]有多少不同路径dp=[[0]*nfor_inrange(m)]#初始化foriinrange(m):dp[i][0]=1forjinra......
  • 2023-11-22:用go语言,给你一个长度为 n 下标从 0 开始的整数数组 nums。 它包含 1 到 n
    2023-11-22:用go语言,给你一个长度为n下标从0开始的整数数组nums。它包含1到n的所有数字,请你返回上升四元组的数目。如果一个四元组(i,j,k,l)满足以下条件,我们称它是上升的:0<=i<j<k<l<n且nums[i]<nums[k]<nums[j]<nums[l]。输入:nums=[1,3,2,......