#P3928. SAC E#1 - 一道简单题 Sequence2

    ID: 2884 Type: RemoteJudge 2000ms 125MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>线段树树状数组离散化洛谷原创O2优化洛谷月赛

SAC E#1 - 一道简单题 Sequence2

题目背景

小强和阿米巴是好朋友。

题目描述

小强喜欢数列。有一天,他心血来潮,写下了三个长度均为 nn 的数列。

阿米巴也很喜欢数列。但是他只喜欢其中一种,波动数列。

阿米巴把他的喜好告诉了小强。小强便打算找出这三个数列内的最长波动数列。

也就是说,如果我们将三个数列记做 an,1,an,2,an,3a_{n,1},a_{n,2},a_{n,3},他必须要构造一个二元组序列:(pi,qi)(p_i,q_i),使得对于任何 i>1i>1 有:

  • pi>pi1p_i>p_{i-1}

  • qi=0q_i=0api,qiapi1,qi1a_{p_i,q_i} \ge a_{p_{i-1},q_{i-1}}

  • qi=1q_i=1api,qiapi1,qi1a_{p_i,q_i} \le a_{p_{i-1},q_{i-1}}

  • qi=2q_i=2,只要保持段内同向即可(就是对于连续的一段 qi=2q_i=2,要么都有 api,qiapi1,qi1a_{p_i,q_i} \ge a_{p_{i-1},q_{i-1}},要么都有 api,qiapi1,qi1a_{p_i,q_i} \le a_{p_{i-1},q_{i-1}}

小强希望这个二元组序列尽可能长。

提示:当 qiqi1q_i \not = q_{i-1} 时,数列的增减性由 qiq_i 而非 qi1q_{i-1} 决定。

清晰版题目描述

小强拿到一个 3×n3 \times n 的数组,要在每一列选一个数(或者不选),满足以下条件:

  1. 如果在第一行选,那它必须大于等于上一个数。

  2. 如果在第二行选,那么必须小于等于上一个数。

  3. 如果在第三行选,对于连续的一段在第三行选的数,必须满足方向相同(都小于等于上一个数或者都大于等于上一个数)。

输入格式

输入包含 44 行。

第一行一个数 nn,表示数列长度。

2,3,42,3,4 行,每行 nn 个整数,分别表示三个数列。

输出格式

输出仅包含一个整数,即最长波动数列的长度。

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

6

提示

对于 20%20\% 的数据,n10n \le 10m1000m \le 1000

对于 60%60\% 的数据,n1000n \le 1000m1000m \le 1000

对于 100%100\% 的数据,n105n \le 10^5m109m \le 10^9

其中 m=max{ai}m=\max\{|a_i|\}

样例解释:

取第三行 1,2,31,2,3(增),然后取第一行 66(增),然后取第三行 5,45,4(减),长度为 66