CF1420C2.Pokémon Army (hard version)

提高+/省选-

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

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

题目描述

This is the hard version of the problem. The difference between the versions is that the easy version has no swap operations. You can make hacks only if all versions of the problem are solved.

Pikachu is a cute and friendly pokémon living in the wild pikachu herd.

But it has become known recently that infamous team R wanted to steal all these pokémon! Pokémon trainer Andrew decided to help Pikachu to build a pokémon army to resist.

First, Andrew counted all the pokémon — there were exactly nn pikachu. The strength of the ii-th pokémon is equal to aia_i, and all these numbers are distinct.

As an army, Andrew can choose any non-empty subsequence of pokemons. In other words, Andrew chooses some array bb from kk indices such that 1≤b1<b2<⋯<bk≤n1 \le b_1 \lt b_2 \lt \dots \lt b_k \le n, and his army will consist of pokémons with forces ab1,ab2,…,abka_{b_1}, a_{b_2}, \dots, a_{b_k}.

The strength of the army is equal to the alternating sum of elements of the subsequence; that is, ab1−ab2+ab3−ab4+…a_{b_1} - a_{b_2} + a_{b_3} - a_{b_4} + \dots.

Andrew is experimenting with pokémon order. He performs qq operations. In ii-th operation Andrew swaps lil_i-th and rir_i-th pokémon.

Andrew wants to know the maximal stregth of the army he can achieve with the initial pokémon placement. He also needs to know the maximal strength after each operation.

Help Andrew and the pokémon, or team R will realize their tricky plan!

这是该问题的困难版本。两个版本的区别在于,简单版本中没有交换操作。只有当该问题的所有版本均被解决时,才允许进行 hack。

皮卡丘是一种可爱又友善的宝可梦,生活在野生皮卡丘群落中。

但最近人们得知,臭名昭著的火箭队企图偷走所有这些宝可梦!训练家安德鲁决定帮助皮卡丘组建一支宝可梦军队来抵抗。

首先,安德鲁清点了所有宝可梦——恰好有 nn 只皮卡丘。第 ii 只皮卡丘的力量值为 aia_i,且所有这些数值互不相同。

作为一支军队,安德鲁可以任选一个非空的宝可梦子序列。换言之,安德鲁从 kk 个下标中选出一个数组 bb,满足 1≤b1<b2<⋯<bk≤n1 \le b_1 \lt b_2 \lt \dots \lt b_k \le n,他的军队将由力量值分别为 ab1,ab2,…,abka_{b_1}, a_{b_2}, \dots, a_{b_k} 的宝可梦组成。

军队的强度定义为该子序列元素的交错和(alternating sum),即 ab1−ab2+ab3−ab4+…a_{b_1} - a_{b_2} + a_{b_3} - a_{b_4} + \dots。

安德鲁正在对宝可梦的排列顺序进行实验。他执行 qq 次操作;在第 ii 次操作中,安德鲁交换第 lil_i 只与第 rir_i 只宝可梦的位置。

安德鲁希望知道:在初始宝可梦排列下,他所能获得的军队最大强度是多少;此外,他还希望知道每次操作后所能获得的最大强度。

请帮助安德鲁和宝可梦们吧,否则火箭队将实现他们狡猾的阴谋!

输入格式

Each test contains multiple test cases.

The first line contains one positive integer tt (1≤t≤1031 \le t \le 10^3) denoting the number of test cases. Description of the test cases follows.

The first line of each test case contains two integers nn and qq (1≤n≤3⋅105,0≤q≤3⋅1051 \le n \le 3 \cdot 10^5, 0 \le q \le 3 \cdot 10^5) denoting the number of pokémon and number of operations respectively.

The second line contains nn distinct positive integers a1,a2,…,ana_1, a_2, \dots, a_n (1≤ai≤n1 \le a_i \le n) denoting the strengths of the pokémon.

ii-th of the last qq lines contains two positive integers lil_i and rir_i (1≤li≤ri≤n1 \le l_i \le r_i \le n) denoting the indices of pokémon that were swapped in the ii-th operation.

It is guaranteed that the sum of nn over all test cases does not exceed 3⋅1053 \cdot 10^5, and the sum of qq over all test cases does not exceed 3⋅1053 \cdot 10^5.

每个测试包含多个测试用例。

第一行包含一个正整数 tt(1≤t≤1031 \le t \le 10^3),表示测试用例的数量。随后是各测试用例的描述。

每个测试用例的第一行包含两个整数 nn 和 qq(1≤n≤3⋅105, 0≤q≤3⋅1051 \le n \le 3 \cdot 10^5,\ 0 \le q \le 3 \cdot 10^5),分别表示宝可梦的数量和操作次数。

第二行包含 nn 个互不相同的正整数 a1,a2,…,ana_1, a_2, \dots, a_n(1≤ai≤n1 \le a_i \le n),表示各宝可梦的战斗力。

接下来的 qq 行中,第 ii 行包含两个正整数 lil_i 和 rir_i(1≤li≤ri≤n1 \le l_i \le r_i \le n),表示在第 ii 次操作中交换的宝可梦的下标。

保证所有测试用例的 nn 之和不超过 3⋅1053 \cdot 10^5,且所有测试用例的 qq 之和不超过 3⋅1053 \cdot 10^5。

输出格式

For each test case, print q+1q+1 integers: the maximal strength of army before the swaps and after each swap.

对于每个测试用例,输出 q+1q+1 个整数:交换前军队的最大战斗力,以及每次交换后的最大战斗力。

输入输出样例

  • 输入#1

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

    输出#1

    3
    4
    2
    2
    2
    9
    10
    10
    10
    9
    11

说明/提示

Let's look at the third test case:

Initially we can build an army in such way: [1 2 5 4 3 6 7], its strength will be 5−3+7=95-3+7=9.

After first operation we can build an army in such way: [2 1 5 4 3 6 7], its strength will be 2−1+5−3+7=102-1+5-3+7=10.

After second operation we can build an army in such way: [2 1 5 4 3 7 6], its strength will be 2−1+5−3+7=102-1+5-3+7=10.

After third operation we can build an army in such way: [2 1 4 5 3 7 6], its strength will be 2−1+5−3+7=102-1+5-3+7=10.

After forth operation we can build an army in such way: [1 2 4 5 3 7 6], its strength will be 5−3+7=95-3+7=9.

After all operations we can build an army in such way: [1 4 2 5 3 7 6], its strength will be 4−2+5−3+7=114-2+5-3+7=11.

我们来看第三个测试用例:

最初,我们可以这样组建一支军队:[1\ 2\ 5\ 4\ 3\ 6\ 7],其战力为 5−3+7=95-3+7=9。

第一次操作后,我们可以这样组建一支军队:[2\ 1\ 5\ 4\ 3\ 6\ 7],其战力为 2−1+5−3+7=102-1+5-3+7=10。

第二次操作后,我们可以这样组建一支军队:[2\ 1\ 5\ 4\ 3\ 7\ 6],其战力为 2−1+5−3+7=102-1+5-3+7=10。

第三次操作后,我们可以这样组建一支军队:[2\ 1\ 4\ 5\ 3\ 7\ 6],其战力为 2−1+5−3+7=102-1+5-3+7=10。

第四次操作后,我们可以这样组建一支军队:[1\ 2\ 4\ 5\ 3\ 7\ 6],其战力为 5−3+7=95-3+7=9。

所有操作完成后,我们可以这样组建一支军队:[1\ 4\ 2\ 5\ 3\ 7\ 6],其战力为 4−2+5−3+7=114-2+5-3+7=11。

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

首页