程序员必知:国庆清北Day5T3holyshit

简介: 程序员必知:国庆清北Day5T3holyshit

一道神题 (holyshit)

Time Limit:1000ms Memory Limit:128MB

题目描述

LYK有n个数ai。

它想找两段互不相交的区间。

要求:不存在一个数在这两段区间中总共的出现次数超过1次。

LYK想使得取出的两段区间的长度的和尽可能大。

问这个值最大是多少。

输入格式(holyshit.in)

第一行一个数n。

接下来一行n个数ai。

输出格式(holyshit.out)

一个数表示可能的最大值是多少

输入样例

10

//代码效果参考: http://www.zidongmutanji.com/zsjx/176575.html

3 1 2 1 2 4 5 4 5 6

输出样例

6

样例解释

取区间【1,3】和【8,10】是最优的。

数据范围

对于20%的数据n<=10。

对于40%的数据n<=50。

对于60%的数据n<=200。

对于100%的数据2<=n<=2000,1<=ai<=n。

g【i】【j】 表示 【i,j】取一段子区间,没有元素重复,使得子区间长度最长 n^2

g【i】【j-1】 g【i+1】【j】 【i,j】没有元素重复

1 for (i=n; i>=1; i--){

2 for (j=1; j<=n; j++) v【j】=false; FLAG=true;

3 for (j=i; j<=n; j++){

4 if (v【a【j】】) FLAG=false;

5 v【a【j】】=true;

6 if (FLAG) g【i】【j】=j-i+1; else g【i】【j】=max(g【i+1】【j】,g【i】【j-1】);

7 }

8 }

先把所有符合条件的区间全部搞出来,由这些区间取扩展到g更大

【A,B】是合法的, 则 g【A】【B】=B-A+1 g【l】【r】 l=B 都有g【l】【r】>=B-A+1 n^2

先枚举第一段区间的右端点r,当l=1时,求出所有×的位置,并求出第二段区间能取的最大长度。

随着l往右走,部分×被解锁,更新第二段区间的最大长度(并查集实现),然后更新答案。

f【i】表示在并查集树上的父亲,i的祖先就表示从i出发向右最近×的位置。

x这个位置被解锁了,getf(x+1)表示新增的区间右端点在哪里, 更新f呢,f【x】=getf(x+1);

相关文章
|
9月前
|
前端开发 JavaScript Java
2023,半路转行程序员的第一年
键盘敲着总结,抬头看桌面的日期,转眼间来到了 2024 年,时间就这么悄悄的流逝。本来想 12 月底就把总结给写完的,结果一拖,拖到了 2024😂
104 0
2023,半路转行程序员的第一年
|
12天前
|
程序员 开发者
30 + 程序员的职场渡劫,差点被裁后我翻身了
阿飞,30+的一线城市程序员,在互联网公司工作五年后遭遇裁员危机和高强度加班。使用飞算JavaAI后,工作效率大幅提升,不仅告别了无效加班,还获得了领导的认可与晋升机会。业余时间增多,生活品质提高。现推荐参加“飞算JavaAI炫技大赛”,低门槛高奖励,参赛即有机会赢取丰厚奖品,释放编程潜力。
|
8月前
|
人工智能 程序员
程序员必知:国庆清北Day5T3holyshit
程序员必知:国庆清北Day5T3holyshit
34 0
|
SQL 算法 NoSQL
编写代码最应该做好的事情是什么?(备战2022春招或暑期实习,每天进步一点点,打卡100天,Day8)
编写代码最应该做好的事情是什么?(备战2022春招或暑期实习,每天进步一点点,打卡100天,Day8)
159 0
编写代码最应该做好的事情是什么?(备战2022春招或暑期实习,每天进步一点点,打卡100天,Day8)
|
设计模式 人工智能 算法
程序人生 - 过来人经验:程序员怎么升职加薪,迎娶白富美
程序人生 - 过来人经验:程序员怎么升职加薪,迎娶白富美
208 0
|
Serverless 程序员 开发者
这位硬核程序员,想好怎么过春节了吗?
码上过年,过不一样的年。记得来领年货哦。
668 0
|
程序员
那些拼命加班的程序员们,后来都怎么样了?
阅读本文大概需要 5 分钟。 作者:黄小斜 小张是个 80 后程序员,典型的技术人,他非常热衷于技术,对代码有着独特的追求。 小张属于踏实肯干的程序员,在公司工作兢兢业业,也干出了很不错的成绩,当然,与之伴随的是,加班成为了家常便饭。