CF1446D2 题解

CF1446C Xor Tree 字典树* link 01字典树,dp, 2100 想了很久才想明白。。总之问题等价于保留尽可能多的数,使只存在一对(i,j)(i, j)(i,j) 对彼此而言异或值都是最小的。 建立字典树,设 fpf_pfp​ 表示以 ppp 为根的子树最多保留多少个数。对于以 ppp 为根的子树, 1.若它没有子节点(即为叶节点),则f[p]=1; 2.若仅有一个子节点,则f[p]=f[p的子节点]; 3.若它有两个子节点,则f[p]=max(f[p的子节点]) + 1; 对于3,如果我们考虑取左子树,则无论任取右子树中的哪一个, 阅读详情

CF1446D2 Frequency Problem (Hard Version)

讲一种 O ( n ) O(n) O(n) 的神仙做法,代码转载于 g m h 77 gmh77 gmh77 神仙。

说实话这个我也不懂算不算转载,如果有问题可以直接私聊我。

考虑对于最终答案来说,我们重复计算不符合条件的比较小的区间是不影响的。

所以我们可以考虑对于每一个非众数进行计算。

  • 计算只有一个众数的情况

虽然说可能出现了两个非众数,但是肯定存在比其更大的区间。

  • 计算多个众数的情况,我们不妨记录一下众数的位置每次来跳众数,每一次更新一下当前值为 s s s 的非众数的出现次数。也就是从左到右进行枚举。

考虑对于非众数进行圈定一个区间,同时记录当前值 s s s 出现的最靠右的位置和其经过的众数,为了防止数组冲突可能需要额外处理一下。

#include <bits/stdc++.h>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define ll long long
//#define file
using namespace std;

int Sum[200002],sum[200002],a[200002],L[200002],R[200002],n,i,j,k,l,mx,mx2,ans;
int ls[200002],d[800001][2],b[200002],c[200002],f[800001],I[200002],id[200002];

int get(int t,int x)
{
	if (f[t]<=0) return -f[t];
	return I[f[t]+(x-d[t][0])];
}

void work(int i,int s)
{
	int j,k,l;
	l=sum[i]-sum[ls[s]]; // 1 的个数,这次和上次之间的
	while (l && b[s]<=R[s])
	{
		k=get(b[s],c[s]),ans=max(ans,(I[id[s]+1]-1)-k);//只出现 1 次的贡献
		if (c[s]==d[b[s]][1]) ++b[s];
		--l,++c[s],++id[s];// 每次向后跳,而且保证其不能超过当前已经有了的数
	}
	// c[s] 表示值 s 已经经过了几个众数
	if (b[s]>R[s]) ++R[s],d[R[s]][0]=d[R[s]-1][1]+1,d[R[s]][1]=c[s]+l,f[R[s]]=id[s],id[s]+=l,c[s]+=l;// id[s] = c[s] = l
    /*
    众数是 1,不是众数是 -1。

    可以发现 d 存了两个值。
    不妨猜测是 1 的数量,和当前值的数量
    d[R[s]][0] 表示经过了几个当前的数。

    */
	k=get(b[s],c[s]),ans=max(ans,(i-1)-k);// 这个更新肯定不会更劣,如果说当前众数比较少,那么因为是众数所以后面肯定会更新覆盖
	/*
    简单来说每次寻找一个最大的 s 的数量和众数的数量相同的区间
    为了保证不会出现众数数量比当前的数的数量多的情况,使用 f 数组向后面滚动
	*/
	if (i<=n)// 不是考虑整个区间的
	{
		if (c[s]==d[b[s]][0]) // 数量相同
		{
			if (b[s]==L[s]) //
			{
				--L[s];// 区间可以扩展
				d[L[s]][0]=d[L[s]][1]=d[L[s]+1][0]-1;
				f[L[s]]=-i;
			}
			--b[s];// 因为回溯了,所以之前的贡献也应当减去
		}
		--c[s];// 回溯一个位置
	}
	ls[s]=i; // 当前颜色最右边的位置
}
/*
可以发现 L 是不会改变值的
容易想到这个就是整个区间最左边的时候才有可能产生,也就是可以向左继续延伸
*/


int main()
{
	#ifdef file
	freopen("CF1446D.in","r",stdin);
//	freopen("b.out","w",stdout);
	#endif

	scanf("%d",&n);
	fo(i,1,n)
	{
		scanf("%d",&a[i]),++Sum[a[i]];
		if (Sum[a[i]]>mx) mx=Sum[a[i]],mx2=a[i];
	}
	fo(i,1,n+1) sum[i]=sum[i-1]+(a[i]==mx2); // 找众数

	k=l=0;// 这个 l 只是单纯用来防止算重复
	fo(i,1,n)
	if (i!=mx2) //枚举值域
	b[i]=l+(Sum[i]+1),L[i]=R[i]=b[i],c[i]=0,d[b[i]][0]=d[b[i]][1]=0,l+=Sum[i]*2+2;
	fo(i,1,n) if (a[i]==mx2) I[++k]=i; // 记录位置

	fo(i,1,n) if (a[i]!=mx2) work(i,a[i]);
	fo(i,1,n) if (i!=mx2) work(n+1,i);
	printf("%d\n",ans);

	fclose(stdin);
	fclose(stdout);
	return 0;
}

CVAT实战:从零搭建高效数据标注流水线 本文详细介绍了如何使用CVAT搭建高效的数据标注流水线,从环境部署到团队协作,再到数据流转和质量把控,全面覆盖了数据标注的各个环节。CVAT作为一款开源的数据标注工具,支持多人协作和丰富的标注类型,特别适合遥感图像等复杂场景的标注需求。通过实战案例和技巧分享,帮助读者快速掌握CVAT的核心功能,提升标注效率。 阅读详情

相关推荐

机器人C++开源库The Robotics Library (RL)使用手册(三)

进入VS工程,我们先看看这些功能函数及其依赖库的分布关系:rl命名空间下,主要有八大模块。搞定VS后将逐个拆解。

qq_34839823的博客 1736

【Codeforces 1447F2】Frequency Problem (Hard Version) | 思维、分块、双指针

题目链接:https://codeforces.ml/contest/1447/problem/F2 题目大意: 给出一段序列NNN,询问最长的众数不唯一子区间 题目思路: 之前牛客碰到过一个关于众数的题,所以easy versioneasy\ versioneasy version很容易就秒掉了 一个性质: 最长众数不唯一子区间内必定包含区间众数 proofproofproof: 任何一个众数不唯一的子区间都是一段序列去掉首一部分和尾一部分组成的。 假设最长众数不唯一不包含.

一只酷酷光儿的博客 406

OpenClaw 最强技能 self-improving-agent 详解:让 AI 从错误中自主学习

self-improving-agent 是 OpenClaw 生态中最受欢迎的技能插件,下载量突破 268k。它能让 AI 记住犯过的错误和解决方案,实现持续自我改进。本文深入讲解其工作原理、安装配置和实战案例。测试数据显示:部署流程时间从 15 分钟降到 2 分钟(87%↓),API 调试时间从 2 小时降到 20 分钟,数据库查询编写时间减少 90%。文章包含完整架构图、配置文件示例、3 个详细实战案例和性能测试数据,适合开发者、运维和数据分析师使用。

qq_38610923的博客 3635

CF1446D Frequency Problem

题目大意: 给定一个长度为nnn的序列,要求一个子区间,使得出现次数最多的数不唯一,要求子区间的最大长度。 Easy:n<=2e5,ai<=min(n,100)n<=2e5,a_i<=min(n,100)n<=2e5,ai​<=min(n,100) Hard:n<=2e5,ai<=nn<=2e5,a_i<=nn<=2e5,ai​<=n 分析: 首先有一个结论是,假设原区间出现次数最多的数为xxx,合法区间出现最多的数其中一个必然是xxx

liangzihao1的博客 291

IP路由原理、静态路由及动态路由区分

什么是路由 路由是指导IP报文发送的路径信息。 直连路由:目的地所在网络与路由器直接相连。 间接路由:目的地所在网络与路由器非直接相连。 静态路由是由管理员手工配置而生成的路由。 动态路由路由器使用路由协议从其他路由器那里获悉的路由。

weixin_42227328的博客 5470

单相PWM整流器四象限运行原理

简述单相PWM整流器四象限运行原理。

m0_75208156的博客 8302

【平衡规划】【CF1447F2】Frequency Problem (Hard Version)

题目 http://codeforces.com/contest/1446/problem/D2 题目大意 给你一个数组,问最长的一个区间使得这个区间的众数不唯一。 n<=2×105n<=2\times10^5n<=2×105 ai<=na_i<=nai​<=n easy ai<=100a_i<=100ai​<=100 思路 考试的时候没有想出最重要的性质,变得完全不可做 性质:整个序列的众数一定是最优区间的众数之一。 下面我们令 DDD 表示整个序列的

Brute♂force 733

作物生长模型Oryza V3实战1:为什么要研究它

ORYZAV3是水稻生长模拟模型ORYZA2000的最新升级版本(3.5版),作为作物生长模型,它通过数学方法和计算机技术模拟水稻生长发育过程及其与环境条件的相互作用。主要功能包括:模拟不同条件下的水稻生长和产量形成、评估环境胁迫影响、分析土壤碳氮动态以及进行区域尺度模拟。国内应用广泛,科研机构用于气候变化影响评估、灌溉模式比较等研究,并开展参数敏感性分析和应用培训。使用流程分为六个步骤:确定输入参数(气象、土壤、作物三类)、参数校准、设置模拟环境、运行模型、分析结果(输出50个参数)和计算产量(穗干重×收

504

codeforces 1446D(思维,优先队列)

题目 题意:给出一个有n个顶点的树,并给树上1~k种颜色(k<n-1),求边的权值(每种颜色的边连接的节点的权值相加,两边相邻中间节点相加两次,一个节点可多次被相加) 思路:对于没添加一种颜色都会出现一个相邻的而颜色不同的边,相当与多加了一个节点的权值,且该节点的度必须大于1,所以只要求出度不为一的节点的权值排序即可得到答案 AC代码: package 练习; import java.io.*; import java.lang.*; import java.util.*; import sun.n

nankes的博客 266

华为面试手撕真题【求1-n的最小公倍数】

求1-n的最小公倍数

MISAYAONE的博客 2万+

基于STM32设计的便携式心电信号监测系统_474

本课题设计并实现了一种基于STM32单片机的便携式心电信号监测系统。系统以STM32F103C8T6为核心控制单元,结合PulseSensor心率传感器,实现对人体心率信号的采集与处理。通过单片机内部ADC模块对传感器输出的模拟电压信号进行采样,并对采集数据进行分析处理,从而计算得到实时心率值。

162

CF1446E Long Recovery

Description 传送门 Solution 玩了一段时间觉得可以直接模拟,全部涂成黑色,然后再全部变成白色,BFS即可??? 好吧,除了样例什么都过不去。 因为有一种特殊的情况:并不一定要先补上那个空白,而是可以先右上的删去,再加入空白,再把右上加入,可以白嫖一次。 那么我们只需要把这种情况判断掉就好了!!!好吧,到底应该怎么判,答案怎么计算还有重新想一想。 我们可以从中定义一个势能ϕ\phiϕ,即相邻的块不同的个数,那么每一次翻转一个格子会根据旁边有三个不同还是两个不同而使得ϕ\p

Deep_Thinking的博客 369

解决Google Play签名问题:Android App Bundle上传指南

摘要:本文分享了解决Android App Bundle上传至Google Play时遇到的签名问题的经验。当使用pepk.jar工具加密私钥时,出现"NoSuchAlgorithmException"错误。解决方案包括:确保使用JDK 11+版本、更新pepk.jar工具、验证密钥库信息,并提供详细命令行示例。通过升级开发环境和正确配置签名参数,最终成功生成加密密钥文件。文章为开发者提供了实用的技术参考,强调耐心排查问题的重要性。(149字)

m0_62153576的博客 145

CF1446F-Line Distance【计算几何,树状数组,二分】

正题 题目链接:https://www.luogu.com.cn/problem/CF1446F 题目大意 给出nnn个点,求所有点对构成的直线中与原点距离第kkk小的距离 2≤n≤105,1≤k≤n(n−1)22\leq n\leq 10^5,1\leq k\leq \frac{n(n-1)}{2}2≤n≤105,1≤k≤2n(n−1)​ 解题思路 二分还是挺显然的,考虑二分了之后怎么判断一个距离以内的直线数量 两个点对之间的直线在原点距离ddd以内,也就是这条直线经过原点为中心半径为ddd的圆。换一

QuantAsk 985

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

CF1446B Catching Cheaters 题解 DP

简单dp解绿题

达瓦里希,这里禁喵。 1005

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

CF1446C Xor Tree

一、题目 点此看题 二、解法

C202044zxy的博客 376

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【二分+计算几何+树状数组】【CF1446F】Line Distance

题目 http://codeforces.com/contest/1446/problem/F 题目大意 平面上有 nnn 个点,将这些点两两连线,问这些直线到原点的最大距离 n<=105n<=10^5n<=105 思路 考虑二分答案 如果一条直线和原点的距离 >=ans>=ans>=ans 则这条直线与以原点为圆心,ansansans 为半径的园不相交(可能相切) 对于每个点向圆引两条切线。可以证明,如果两个点所连出来的直线和圆不相交,当且仅当这两个点所对应的切点连成的

Brute♂force 576

CF1446D Frequency Problem(思维 前缀和 根号分治 双指针)

原题链接 题意: 给定一个长度为nnn的序列,求最长的满足区间众数有至少两种的区间长度。如果不存在这样的区间,输出 000。 两个版本,easyeasyeasy中1<=ai<=1001<=a_i<=1001<=ai​<=100,hardhardhard中1<=ai<=n1<=a_i<=n1<=ai​<=n 思路: 一个很重要的性质: 记整段序列的众数为xxx,答案区间里xxx一定也是众数之一; 反证法:若当前答案区间里xxx出现的次数不

我们都有光明的未来 245

1446B Catching Cheaters(LCS变形)

Codeforces Round #683 (Div. 2, by Meet IT) D. Catching Cheaters

月巴虫丰博客 476

B. Catching Cheaters(cf)dp

原题链接:Problem - 1446B - Codeforces 题目大意:给你两个字符串A,B,让你分别从A,B中截取子串(连续)C,D,然后这两个串的最长公共子序列长度是LCS(C,D),让你找到最大的4⋅LCS(C,D)−|C|−|D|的值。 思路:这其实是最长公共子序列的变形呜呜我自己还是想不到~ dp[i][j]表示以a[i]结尾b[j]结尾的子串C,D能使4⋅LCS(C,D)−|C|−|D|为最大值的值。 如果a[i] == b[j],那么就由前面的dp[i -1][j -..

qq_52313416的博客 620

可爱的Trie树

可爱的Trie树 鉴于ducati神犇的建议,讲一下tire树(见书p77) Definition 定义 —Trie又被称为前缀树、字典树,所以当然是一棵树。树中的每一条边上都标识有一个字符。这些字符可以是任意一个字符集中的字符。比如对于都是小写字母的字符串,字符集就是’a’-‘z’;对于都是数字的字符串,字符集就是’0’-‘9’;对于二进制字符串,字符集就是0和1。 —用可爱的大白话来讲就是 ...

weixin_46704467的博客 231

动态规划入门(五)最长公共子序列(LCS)

动态规划入门(五)最长公共子序列(LCS) 1143. 最长公共子序列 LCS是一类经典的二维dpdpdp问题,设字符串长度分别为mmm,nnn 0≤i<m0≤i<m0≤i<m,0≤j<n0≤j<n0≤j<n 则我们可以用dp[i][j]dp[i][j]dp[i][j]表示text1text1text1的前iii个序列和text2text2text2的前jjj个序列的最长公共子序列,则dp[i][j]dp[i][j]dp[i][j]的转移方程为 dp[i][j]=dp[i

z2656453168的博客 220

根号分治 + 入门题目

求最长的满足区间众数有至少两种的区间长度。如果不存在这样的区间,输出。的数字,枚举出现次数上界,然后双指针找最长子区间。种,按照 easy.ver 的思路即可。的询问,暴力即可,枚举的次数不超过。状态需要跳的步数,时空复杂度。

ZhgDgE的博客 700

[CF430C]Xor-tree(DFS,贪心)

题目链接:http://codeforces.com/contest/430/problem/c 题意:一棵树上的节点为0或1,希望把节点上的值变为目标值。选择几个点,这几个点会翻转,同时它的孙子…也会翻转,问最少需要修改几个节点。 任选一点开始DFS,判断某点翻转后是否与目标值相同,相同的话则不翻转,不相同则翻转,并且记录该点。 1 /* 2 ━━━━━┒ギリギリ♂ eye!...

weixin_30508241的博客 177

k2p拆机ttl刷breed_最新k2p 22.10.3.42;22.10.3.38和k2 22.6.532.231拆机ttl刷breed图文教程

本帖最后由 航校门口二楼修 于 2020-3-20 16:25 编辑要拆机 要拆机 要拆机注意这里的k2P是 A1 A2 A5mtk,cpu的 。 B1 B2的不要乱刷会变砖的再说B版的根本就没有breed和什么固件好刷,所以请B版的不要看了拆机前请确认路由器之前有没有刷过breed,如果路由器里有breed就不要看了,手残党和怕麻烦的就不要往...

weixin_39924329的博客 5117

PS2游戏金手指

不知道大家在休闲的时候都喜欢做些什么?我就比较喜欢玩电玩,(*^__^*) 嘻嘻…… 今天发一些游戏的金手指,有喜欢电动的朋友我们可以相互交流,最后祝大家能开开心心的过每一天...... --大神的AR2金手指--PS2 M EC878560 14205928 1CF25A28 0966D895 1CF25A2C 1536E4C5 ...

weixin_33742618的博客 4255
上一篇: 平面图转对偶图的应用
下一篇: CF1523H 题解
sharp_legendgod
博客等级 码龄7年 8粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值