GP28434. 扩展巡查

提交5 通过2
通过率40%
文件IO启用
输入文件frontier.in
输出文件frontier.out
时间限制1000ms
内存限制256MiB
    ID: 14593 传统题 文件IO 输入文件:frontier.in 输出文件:frontier.out 1000ms 256MiB 尝试: 5 已通过: 2 难度: 普及+/提高- 上传者: 标签>线性 DP

题目描述

题目描述

一条直线上有 nn 个巡查点,从左到右编号为 1,2,…,n1,2,\ldots,n。这些巡查点按照排列 p1,p2,…,pnp_1,p_2,\ldots,p_n 的顺序依次开放。每个巡查点开放时,你需要当场决定是否巡查;未选的点不能在之后补选。

你可以从中选择若干个巡查点。形式化地,你需要选择一个满足 1≤k≤n1\le k\le n 的整数和一组下标 1≤i1<i2<⋯<ik≤n1\le i_1<i_2<\cdots<i_k\le n,并依次巡查

pi1,pi2,…,pik.p_{i_1},p_{i_2},\ldots,p_{i_k}.

第一个巡查点可以任意选择。对于每个 2≤j≤k2\le j\le k,必须存在某个 1≤t<j1\le t<j 使得

∣pij−pit∣=1.|p_{i_j}-p_{i_t}|=1.

也就是说,之后选择的每个巡查点,都必须在编号上与此前选择过的至少一个巡查点相邻。

请计算最多可以选择多少个巡查点。

输入格式

从文件 frontier.in 中读取数据。

第一行输入一个整数 nn。

第二行输入 nn 个整数 p1,p2,…,pnp_1,p_2,\ldots,p_n,表示巡查点的开放顺序。

输出格式

输出到文件 frontier.out 中。

输出一个整数,表示最多可以选择的巡查点数量。

样例

1
1
1
5
3 1 4 2 5
4

样例解释

样例 #1 中,唯一的巡查点可以直接选择,因此答案为 11。

样例 #2 中,可以依次选择编号为 3,4,2,53,4,2,5 的巡查点,它们在输入中的下标依次为 1,3,4,51,3,4,5。选择 44 时它与 33 相邻,选择 22 时它与 33 相邻,选择 55 时它与 44 相邻,因此可以选择 44 个巡查点。如果选择全部 55 个巡查点,第二个被选择的巡查点将是 11,它与此前唯一选择的 33 不相邻,所以无法选择全部巡查点。故答案为 44。

数据规模与约定

对于所有数据,保证:

  • 1≤n≤2000001\le n\le 200000;
  • 对于所有 1≤i≤n1\le i\le n,1≤pi≤n1\le p_i\le n;
  • p1,p2,…,pnp_1,p_2,\ldots,p_n 是 1,2,…,n1,2,\ldots,n 的一个排列。

本题采用子任务捆绑计分。只有通过某个子任务内的所有测试点,才能获得该子任务的分数。各子任务独立计分。

子任务 分值 额外约束
1 20 n≤20n\le 20
2 30 n≤250n\le 250
3 50 无特殊限制

下发文件

下载三组测试数据,非真实测试数据