程序员必知:国庆清北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);

相关文章
|
6月前
|
前端开发 JavaScript Java
2023,半路转行程序员的第一年
键盘敲着总结,抬头看桌面的日期,转眼间来到了 2024 年,时间就这么悄悄的流逝。本来想 12 月底就把总结给写完的,结果一拖,拖到了 2024😂
82 0
2023,半路转行程序员的第一年
|
5月前
|
人工智能 程序员
程序员必知:国庆清北Day5T3holyshit
程序员必知:国庆清北Day5T3holyshit
21 0
|
Java 程序员
一个程序员的中秋节碎碎念
2022 年中秋节非常特殊,和教师节同一天。 在这个特殊的日子里,谈谈我的中秋仪式感,中秋计划怎么过,并谈谈自己的一些收获和感悟。
260 0
一个程序员的中秋节碎碎念
|
设计模式 算法 程序员
程序人生 - 给IT新人的15点建议:苦逼程序员的辛酸反省与总结
程序人生 - 给IT新人的15点建议:苦逼程序员的辛酸反省与总结
140 0
|
SQL 前端开发 Java
Java开发:19届二本技术渣,校招与工作一个月辞职后的上岸之路
Java开发:19届二本技术渣,校招与工作一个月辞职后的上岸之路
174 0
|
Serverless 程序员 开发者
这位硬核程序员,想好怎么过春节了吗?
码上过年,过不一样的年。记得来领年货哦。
647 0
|
机器学习/深度学习 算法框架/工具 流计算
情人节来了!程序员应该如何优雅的度过?
祝大家情人节快乐!内有过节攻略,必看!
|
Java 程序员
一个“码农”自述的血泪史:当了35年程序员,我最大的遗憾就是没抓住机遇转行
注:这是一个“一子错,满盘皆落索”的故事。兢兢业业干了35年的程序员,最后却认识到,程序员的力量太过微小。无论你写程序有多厉害,你都很难有权力真正改变一些失败的产品、失败的项目。
1520 0