AT_arc149_b.[ARC149B] Two LIS Sum

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

对于数列 P=(P1,…,PN)P = (P_1, \ldots, P_N),我们记其最长严格递增子序列的长度为 LIS(P)\mathrm{LIS}(P)。

给定两个由 11 到 NN 的整数构成的排列 A=(A1,…,AN)A = (A_1, \ldots, A_N) 和 B=(B1,…,BN)B = (B_1, \ldots, B_N)。你可以对这两个数列进行如下操作任意多次(也可以一次都不做):

  • 选择一个整数 1≤i≤N−11 \leq i \leq N-1,交换 AiA_i 与 Ai+1A_{i+1},同时交换 BiB_i 与 Bi+1B_{i+1}。

请你求出通过若干次操作后,LIS(A)+LIS(B)\mathrm{LIS}(A) + \mathrm{LIS}(B) 的最大可能值。

最长递增子序列的定义
数列的子序列是指,从原数列中删除 00 个或多个元素后,按原顺序连接剩下元素得到的新数列。例如,(10,30)(10,30) 是 (10,20,30)(10,20,30) 的子序列,但 (20,10)(20,10) 不是 (10,20,30)(10,20,30) 的子序列。

数列的最长递增子序列是指所有严格递增的子序列中,长度最大的那一个。

输入格式

输入通过标准输入给出,格式如下:

NN A1A_1 …\ldots ANA_N B1B_1 …\ldots BNB_N

输出格式

请输出通过若干次操作后,LIS(A)+LIS(B)\mathrm{LIS}(A) + \mathrm{LIS}(B) 的最大可能值。

输入输出样例

  • 输入#1

    5
    5 2 1 4 3
    3 1 2 5 4

    输出#1

    8
  • 输入#2

    5
    1 2 3 4 5
    1 2 3 4 5

    输出#2

    10

说明/提示

数据范围

  • 2≤N≤3×1052 \leq N \leq 3 \times 10^5
  • 1≤Ai≤N1 \leq A_i \leq N
  • 1≤Bi≤N1 \leq B_i \leq N
  • 若 i≠ji \neq j,则 Ai≠AjA_i \neq A_j 且 Bi≠BjB_i \neq B_j

样例解释 1

例如,可以按如下方式操作,使得 LIS(A)+LIS(B)=8\mathrm{LIS}(A) + \mathrm{LIS}(B) = 8:

  • 以 i=2i = 2 进行操作。此时 A=(5,1,2,4,3)A = (5,1,2,4,3),B=(3,2,1,5,4)B = (3,2,1,5,4)。
  • 以 i=1i = 1 进行操作。此时 A=(1,5,2,4,3)A = (1,5,2,4,3),B=(2,3,1,5,4)B = (2,3,1,5,4)。
  • 以 i=4i = 4 进行操作。此时 A=(1,5,2,3,4)A = (1,5,2,3,4),B=(2,3,1,4,5)B = (2,3,1,4,5)。

此时 AA 的最长递增子序列为 (1,2,3,4)(1,2,3,4),即 LIS(A)=4\mathrm{LIS}(A) = 4。BB 的最长递增子序列为 (2,3,4,5)(2,3,4,5),即 LIS(B)=4\mathrm{LIS}(B) = 4。

样例解释 2

如果一次操作都不做,可以得到 LIS(A)+LIS(B)=10\mathrm{LIS}(A) + \mathrm{LIS}(B) = 10。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页