题目描述
给一个长度为 n、包含方括号和圆括号的括号串,定义一个串 S 合法,当且仅当以下几种情况之一:
- S 为空串;
- S=[T] 且 T 合法;
- S=(T) 且 T 合法;
- S=TU 且 T,U 合法。
比如 ()
,[()]
都是一个合法的括号串,但 [()]())
不是。
定义一个操作叫选择一个区间 [l,r],并把所有在区间里的字符从方括号变圆括号,从圆括号变方括号。
定义一个括号串的权值 val(S) 为:如果这个括号串能通过操作变成合法,就是最小的操作次数;否则是 0。
给出 q 次修改查询,有以下两种可能。
- 修改,给出一个区间 [l,r] 把所有在区间里的字符从方括号变圆括号,从圆括号变方括号。
- 查询,给出一个区间 [l,r],求 ∑[l′,r′]∈[l,r]val(s[l′,r′])。
输入格式
第一行四个整数 n,q,T,subtaskid,分别表示字符串长度,操作次数,强制在线的参数,子任务编号。
接下来一行一个长度为 n 的字符串。
接下来 q 行,每行三个数 opt,L,R,表示一次操作。
强制在线,真实的 l=min((L+T⋅lastans)modn+1,(R+T⋅lastans)modn+1),r=max((L+T⋅lastans)modn+1,(R+T⋅lastans)modn+1) 其中 lastans 是上一次询问的答案,如果没有上次询问则为 0。
请注意,即使是离线的部分分,也有可能 L=l,R=r。
输出格式
若干行,每次询问输出一个答案。
提示
对于所有数据,1≤n,q≤5⋅105,0≤T≤109,1≤l,r≤n,1≤opt≤2。
子任务编号 |
n,q≤ |
特殊性质 |
分值 |
1 |
100 |
E |
5 |
2 |
6000 |
3 |
105 |
AE |
4 |
2⋅105 |
BE |
5 |
CDE |
6 |
CE |
10 |
7 |
DE |
8 |
E |
9 |
无 |
20 |
10 |
5⋅105 |
25 |
A 性质:每个位置有 41 的概率为方圆左右括号。
B 性质:保证没有修改。
C 性质:保证修改为单点修改。
D 性质:保证查询区间 [l,r] 满足 S[l,r] 经过若干次操作可以变成合法串,且不存在另一个 k∈[l,r),使得 S[l,k] 可以经过若干次操作变成合法串。
E 性质:保证 T=0,即可以离线。