CF1987G2.Spinning Round (Hard Version)
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是该问题的困难版本。两种版本的区别仅在于 s 中允许的字符。只有当你同时解决了两个版本的问题时,才能进行 Hack。
给定一个长度为 n 的排列 p,以及一个长度为 n 的字符串 s,其中每个字符都是 L、R 或 ?。
对于每个 i,1≤i≤n:
- 定义 li 为最大的 j<i,使得 pj>pi。如果不存在这样的 j,则 li:=i。
- 定义 ri 为最小的 j>i,使得 pj>pi。如果不存在这样的 j,则 ri:=i。
初始时,你有一个 n 个点(编号为 1 到 n)且没有边的无向图。然后,对于每个 i,1≤i≤n,向图中添加一条边:
- 如果 si=L,则添加边 (i,li)。
- 如果 si=R,则添加边 (i,ri)。
- 如果 si=?,你可以选择添加边 (i,li) 或 (i,ri)。
请你求出所有可能构造出的连通图中,直径的最大值。如果无法构造出任何连通图,输出 −1。
∗ 设 d(s,t) 表示从 s 到 t 的任意路径上最少的边数。
图的直径定义为所有点对 (s,t) 中 d(s,t) 的最大值。
输入格式
每组测试数据包含多组测试用例。输入的第一行包含一个整数 t(1≤t≤2⋅104),表示测试用例的数量。每组测试用例的描述如下。
每组测试用例的第一行包含一个整数 n(2≤n≤4⋅105),表示排列 p 的长度。
第二行包含 n 个整数 p1,p2,…,pn(1≤pi≤n),表示排列 p 的元素,保证 p 是一个排列。
第三行包含一个长度为 n 的字符串 s,只包含字符 L、R 和 ?。
保证所有测试用例中 n 的总和不超过 4⋅105。
输出格式
对于每组测试用例,输出一个整数,表示所有可能构造出的连通图中直径的最大值。如果无法构造出任何连通图,输出 −1。
输入输出样例
输入#1
8 5 2 1 4 3 5 R?RL? 2 1 2 LR 3 3 1 2 L?R 7 5 3 1 6 4 2 7 ?R?R?R? 5 5 2 1 3 4 ????? 6 6 2 3 4 5 1 ?LLRLL 8 1 7 5 6 2 8 4 3 ?R?????? 12 6 10 7 1 8 5 12 2 11 3 4 9 ????????????
输出#1
3 -1 -1 4 4 3 5 8
说明/提示
在第一个测试用例中,有两个连通图(节点编号为索引):


左边的图的直径为 2,右边的图的直径为 3,所以答案为 3。
在第二个测试用例中,无法构造出任何连通图,所以答案为 −1。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?