栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Meximum Array

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Meximum Array

Codeforces Round #767 (Div. 2),C题Meximum Array
可以用双指针在O(n)的复杂度内求解。
先用num数组存一下每个数字出现的次数,然后跑一遍num,贪心找到当前最大MEX。之后用双指针枚举a数组,删除数组中0-MEX-1的数字(一共有MEX个,可以重复删,但是每个数字都要删到),期间可以开个vis数组,并用cnt统计一下删除的数字个数。注意到如果有数字删完了一定要及时更新MEX。
最后注意一下数组清空问题,一定不要在双指针内直接vector< int >vis(n+1),这样写,会被卡成O(n^2),然后TLE!请用for清空数组。

具体代码如下:

#include 
using namespace std;
const int N=2e5+5;
int n,a[N],num[N];
bool vis[N];
void solve()
{
	int mex=0;
	vectorans;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=n;i++) num[a[i]]++;
	while(num[mex]>0) mex++;
	for(int i=1;i<=n;i++)
	{
		int now=mex,cnt=0;
		ans.push_back(now);
		for(int j=i;j<=n;j++)
		{
			num[a[j]]--;
			if(num[a[j]]==0&&a[j]>T;
	while(T--) solve();
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/714327.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号