CF1239B.The World Is Just a Programming Task (Hard Version)

省选/NOI-

通过率:0%

时间限制:1.00s

内存限制:512MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

This is a harder version of the problem. In this version, n≤300 000n \le 300\,000.

Vasya is an experienced developer of programming competitions' problems. As all great minds at some time, Vasya faced a creative crisis. To improve the situation, Petya gifted him a string consisting of opening and closing brackets only. Petya believes, that the beauty of the bracket string is a number of its cyclical shifts, which form a correct bracket sequence.

To digress from his problems, Vasya decided to select two positions of the string (not necessarily distinct) and swap characters located at this positions with each other. Vasya will apply this operation exactly once. He is curious what is the maximum possible beauty he can achieve this way. Please help him.

We remind that bracket sequence ss is called correct if:

  • ss is empty;
  • ss is equal to "(tt)", where tt is correct bracket sequence;
  • ss is equal to t1t2t_1 t_2, i.e. concatenation of t1t_1 and t2t_2, where t1t_1 and t2t_2 are correct bracket sequences.

For example, "(()())", "()" are correct, while ")(" and "())" are not.

The cyclical shift of the string ss of length nn by kk (0≤k<n0 \leq k \lt n) is a string formed by a concatenation of the last kk symbols of the string ss with the first n−kn - k symbols of string ss. For example, the cyclical shift of string "(())()" by 22 equals "()(())".

Cyclical shifts ii and jj are considered different, if i≠ji \ne j.

这是该问题的一个更难版本。在此版本中,n≤300 000n \le 300\,000。

瓦夏是一位经验丰富的编程竞赛题目开发者。如同所有伟大思想者一样,瓦夏也曾遭遇过创作危机。为改善这一状况,佩佳送给他一个仅由左括号和右括号组成的字符串。佩佳认为,该括号串的“美感”等于其循环移位中能构成合法括号序列的个数。

为了暂时摆脱困扰,瓦夏决定选取字符串中的两个位置(二者可以相同),并交换这两个位置上的字符。瓦夏将恰好执行一次该操作。他很好奇:通过这种方式,所能达到的最大美感值是多少?请帮助他。

我们回顾:括号序列 ss 被称为合法的,当且仅当满足以下条件之一:

  • ss 为空;
  • ss 形如 "(tt)",其中 tt 是合法括号序列;
  • ss 形如 t1t2t_1 t_2,即 t1t_1 与 t2t_2 的拼接,其中 t1t_1 和 t2t_2 均为合法括号序列。

例如,"(()())"、"()" 是合法的,而 ")(" 和 "())" 则不合法。

长度为 nn 的字符串 ss 关于 kk(其中 0≤k<n0 \leq k \lt n)的循环移位,是指将 ss 的最后 kk 个字符与前 n−kn - k 个字符拼接所形成的字符串。例如,字符串 "(())()" 关于 22 的循环移位结果为 "()(())"。

若 i≠ji \ne j,则循环移位 ii 与 jj 被视为不同的移位。

输入格式

The first line contains an integer nn (1≤n≤300 0001 \le n \le 300\,000), the length of the string.

The second line contains a string, consisting of exactly nn characters, where each of the characters is either "(" or ")".

第一行包含一个整数 nn(1≤n≤300 0001 \le n \le 300\,000),表示字符串的长度。

第二行包含一个恰好由 nn 个字符组成的字符串,其中每个字符均为 ( 或 )。

输出格式

The first line should contain a single integer — the largest beauty of the string, which can be achieved by swapping some two characters.

The second line should contain integers ll and rr (1≤l,r≤n1 \leq l, r \leq n) — the indices of two characters, which should be swapped in order to maximize the string's beauty.

In case there are several possible swaps, print any of them.

第一行应包含一个整数——通过交换某两个字符所能达到的最大字符串美观度。

第二行应包含两个整数 ll 和 rr(1≤l,r≤n1 \leq l, r \leq n)——为使字符串美观度最大,需交换的两个字符的下标。

若存在多种可能的交换方式,请输出任意一种。

输入输出样例

  • 输入#1

    10
    ()()())(()

    输出#1

    5
    8 7
  • 输入#2

    12
    )(()(()())()

    输出#2

    4
    5 10
  • 输入#3

    6
    )))(()

    输出#3

    0
    1 1

说明/提示

In the first example, we can swap 77-th and 88-th character, obtaining a string "()()()()()". The cyclical shifts by 0,2,4,6,80, 2, 4, 6, 8 of this string form a correct bracket sequence.

In the second example, after swapping 55-th and 1010-th character, we obtain a string ")(())()()(()". The cyclical shifts by 11,7,5,311, 7, 5, 3 of this string form a correct bracket sequence.

In the third example, swap of any two brackets results in 00 cyclical shifts being correct bracket sequences.

在第一个例子中,我们可以交换第 77 个和第 88 个字符,得到字符串 "()()()()()"。该字符串的循环移位(移位量分别为 0,2,4,6,80, 2, 4, 6, 8)均构成合法括号序列。

在第二个例子中,交换第 55 个和第 1010 个字符后,我们得到字符串 ")(())()()(()"。该字符串的循环移位(移位量分别为 11,7,5,311, 7, 5, 3)构成合法括号序列。

在第三个例子中,任意交换两个括号,均导致 00 个循环移位构成合法括号序列。

输入解题思路,AI测评打分。不知道怎么写?

首页