307809: CF1420C2. Pokémon Army (hard version)

Memory Limit:256 MB Time Limit:2 S
Judge Style:Text Compare Creator:
Submit:0 Solved:0

Description

Pokémon Army (hard version)

题意翻译

给出一个序列 $a$,要求求出一个单调递增的下标序列 $b$,使得 $ans=a_{b_1}-a_{b_2}+a_{b_3}-a_{b_4}+\cdots$ 最大,输出这个最大值。 接下来有 $q$ 个操作,每个操作为一个二元组 $(l,r)$,交换 $a_l$ 与 $a_r$。求出交换后最大的 $ans$。 多组数据。 注意:每组数据读入时先是 $n$ 和 $q$,之后是 $n$ 个元素 $a_i$,再之后是 $q$ 个操作 $l_i$ 与 $r_i$。

题目描述

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 $ n $ pikachu. The strength of the $ i $ -th pokémon is equal to $ a_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 $ b $ from $ k $ indices such that $ 1 \le b_1 < b_2 < \dots < b_k \le n $ , and his army will consist of pokémons with forces $ a_{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, $ a_{b_1} - a_{b_2} + a_{b_3} - a_{b_4} + \dots $ . Andrew is experimenting with pokémon order. He performs $ q $ operations. In $ i $ -th operation Andrew swaps $ l_i $ -th and $ r_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!

输入输出格式

输入格式


Each test contains multiple test cases. The first line contains one positive integer $ t $ ( $ 1 \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 $ n $ and $ q $ ( $ 1 \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 $ n $ distinct positive integers $ a_1, a_2, \dots, a_n $ ( $ 1 \le a_i \le n $ ) denoting the strengths of the pokémon. $ i $ -th of the last $ q $ lines contains two positive integers $ l_i $ and $ r_i $ ( $ 1 \le l_i \le r_i \le n $ ) denoting the indices of pokémon that were swapped in the $ i $ -th operation. It is guaranteed that the sum of $ n $ over all test cases does not exceed $ 3 \cdot 10^5 $ , and the sum of $ q $ over all test cases does not exceed $ 3 \cdot 10^5 $ .

输出格式


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

输入输出样例

输入样例 #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=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=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=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=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=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=11 $ .

Input

题意翻译

给出一个序列 $a$,要求求出一个单调递增的下标序列 $b$,使得 $ans=a_{b_1}-a_{b_2}+a_{b_3}-a_{b_4}+\cdots$ 最大,输出这个最大值。 接下来有 $q$ 个操作,每个操作为一个二元组 $(l,r)$,交换 $a_l$ 与 $a_r$。求出交换后最大的 $ans$。 多组数据。 注意:每组数据读入时先是 $n$ 和 $q$,之后是 $n$ 个元素 $a_i$,再之后是 $q$ 个操作 $l_i$ 与 $r_i$。

加入题单

算法标签: