QOJ.ac

QOJ

Time Limit: 3.0 s Memory Limit: 512 MB Total points: 100

#8904. 記録と反記録

Statistics

大きさ $n$ の順列とは、$1$ から $n$ までのすべての値がちょうど一度ずつ現れる、$n$ 個の整数からなる列 $a_1,a_2,\ldots,a_n$ のことです。

列 $b_1,b_2,\ldots,b_l$ が列 $a_1,a_2,\ldots,a_n$ の部分列であるとは、$a$ からいくつかの要素を削除して $b$ を得られることをいいます(すなわち、$l\le n$ であり、$a_{i_t}=b_t$ を満たす $i_1<i_2<\cdots<i_l$ が存在することです)。

  • 列の要素 $a_i$ がそれより前のすべての要素より真に大きいとき(すなわち、すべての $1\le j<i$ について $a_j<a_i$ のとき)、その要素を記録と呼びます。
  • 列の要素 $a_i$ がそれより前のすべての要素より真に小さいとき(すなわち、すべての $1\le j<i$ について $a_j>a_i$ のとき)、その要素を反記録と呼びます。

大きさ $n$ の順列 $p_1,p_2,\ldots,p_n$ が与えられます。これを、空でない 2 つの部分列 $q$ と $r$ に分割してください。つまり、$p$ の各要素はちょうど一方の部分列に入る必要があります。このとき、$q$ の記録の個数と $r$ の反記録の個数の和を最大化してください。

入力

各テストは複数のテストケースからなります。最初の行には、テストケース数を表す整数 $t$($1\le t\le100\,000$)が 1 つ与えられます。続く $2t$ 行にはテストケースの記述が与えられます。

各テストケースの記述の最初の行には、順列の大きさを表す整数 $n$($2\le n\le200\,000$)が 1 つ与えられます。

各テストケースの記述の 2 行目には、元の順列を表す $n$ 個の整数 $p_1,p_2,\ldots,p_n$ が与えられます。$p$ の要素には、$1$ から $n$ までの各数がちょうど一度ずつ現れることが保証されます。

すべてのテストケースにわたる $n$ の総和は $200\,000$ 以下です。

出力

各テストケースについて、最適な分割における $q$ の記録の個数と $r$ の反記録の個数の和として取りうる最大値を表す整数を 1 つ出力してください。

小課題

1 つのテストに含まれるすべてのテストケースの $n$ の値の総和を $N$ とします。

小課題 点数 制約:$n,N$ 追加の制約 必要な小課題 判定に関する情報
$1$ $21$ $n\le16$ $t\le120$ 入出力例 最初の誤り
$2$ $22$ $n\le200$, $N\le2000$ 入出力例, $1$ 最初の誤り
$3$ $14$ $N\le2000$ 入出力例, $1$–$2$ 最初の誤り
$4$ $10$ $N\le10\,000$ 入出力例, $1$–$3$ 最初の誤り
$5$ $13$ $N\le200\,000$ $p$ の最長減少部分列の長さは $2$ 以下 最初の誤り
$6$ $20$ $N\le200\,000$ 入出力例, $1$–$5$ 最初の誤り

入出力例

入力 1

4
5
4 1 2 3 5
10
3 8 10 4 1 2 7 9 5 6
3
1 2 3
6
4 2 5 1 6 3

出力 1

5
6
3
5

注記

最初のテストケースにおける、$p$ を $q$ と $r$ に最適に分割する方法の一例は次のとおりです($q$ の記録と $r$ の反記録を枠で囲んであります)。

  • $q=\boxed{1}\ \boxed{2}\ \boxed{3}\ \boxed{5}$
  • $r=\boxed{4}$

2 番目のテストケースにおける、$p$ を $q$ と $r$ に最適に分割する方法の一例は次のとおりです。

  • $q=\boxed{3}\ \boxed{8}\ 4\ 1\ 2\ \boxed{9}$
  • $r=\boxed{10}\ \boxed{7}\ \boxed{5}\ 6$

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.