#P14888. [OOI2019预选赛long]Обмены в перестановке 排列中的交换

    ID: 14104 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 6 上传者: 标签>CF2000图论动态规划贪心并查集排序二分

[OOI2019预选赛long]Обмены в перестановке 排列中的交换

题目描述

给定一个由 11nn 的整数构成的排列 aa,以及 mm 对下标。

一次操作中,你可以选择这 mm 对下标中的任意一对,并交换排列中这两个位置上的元素。你可以执行任意多次操作,当然也可以一次都不执行。

定义长度为 kk 的递增子序列为一组下标 j1,j2,,jkj_1,j_2,\ldots,j_k,满足:

1j1<j2<<jkn,1 \le j_1 < j_2 < \cdots < j_k \le n,

并且:

aj1<aj2<<ajk.a_{j_1} < a_{j_2} < \cdots < a_{j_k}.

请问通过合理交换元素,最终排列的最长递增子序列长度最大可以达到多少?

输入格式

第一行包含两个整数 n,mn,m,表示排列长度和允许交换的位置对数量。

第二行包含 nn 个两两不同的整数 aia_i,表示排列元素。

接下来 mm 行,每行包含两个整数 ui,viu_i,v_i,表示位置 uiu_iviv_i 上的元素可以交换。

满足:

$$1 \le n \le 10^4,\quad 0 \le m \le \min\left(10^5,\frac{n(n-1)}{2}\right),$$$$1 \le a_i \le n,\quad 1 \le u_i,v_i \le n,\quad u_i \ne v_i.$$

保证输入中的位置对不重复。

输出格式

输出一个整数,表示经过若干次允许交换后,能够得到的最长递增子序列的最大长度。

样例

样例 1

6 2
5 2 4 6 3 1
5 6
1 5
4

样例 2

4 2
2 1 4 3
1 3
2 4
3

样例解释

考虑第一个样例中的排列:

[5, 2, 4, 6, 3, 1]

先交换位置 5566 上的元素,得到:

[5, 2, 4, 6, 1, 3]

再交换位置 1155 上的元素,得到:

[1, 2, 4, 6, 5, 3]

此时最长递增子序列长度为 44,例如可以取子序列:

[1, 2, 4, 6]

子任务

组别 分数 nn mm 必须通过的组 说明
0 样例测试
1 7 8\le 8 =0=0
2 8 0,1
3 10 20\le 20 0,1,2
4 17 100\le 100 0,1,2,3
5 18 1000\le 1000 0,1,2,3,4
6 40 0,1,2,3,4,5 离线测试