1150 C
题意
给你一个由 \(1,2\) 组成的数组,要你重新排列这个数组,使得它的所有是质数的前缀和最长。 \((1\le n\le 200000)\)
Examples
input
5
1 2 1 2 1
output
1 1 1 2 2
input
9
1 1 2 1 1 1 2 1 1
output
1 1 1 2 1 1 1 2 1
解
一个一个往上去凑就行了,优先选2。
1150 D
题意
给你一个长 \(\le 10^5\) 的文本串,现在你有三个模式串,每个长度 \(\le 250\) ,初始为空,现在你有两种操作:
-
+ i c
,给串 \(i\) 末尾加上一个字符 \(c\) -
- i
,删除 \(i\) 末尾的字符
现在在每次操作后询问三个串是否分别对应文本串中三个不相交的子序列。
Examples
input
6 8
abdabc
- 1 a
- 1 d
- 2 b
- 2 c
- 3 a
- 3 b
- 1 c
- 2
output
YES
YES
YES
YES
YES
YES
NO
YES
input
6 8
abbaab - 1 a
- 2 a
- 3 a
- 1 b
- 2 b
- 3 b
- 1
-
2 z
output
YES
YES
YES
YES
YES
NO
YES
NO解
每次询问可以在 \(O(250^2)\) 时间内解决,考虑 \(n^2\) dp。
我们设 \(nxt[i][c]\) 为字符 \(c\) 在位置 \(i\) 后第一次出现的位置。
先考虑 \(n^3\) 做法。
设 \(dp[i][j][k]\) 表示第一个串匹配到 \(i\) ,第二个串