时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}对于给定的 2n 列的矩阵 \begin{bmatrix}<br />a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ <br />a_{2,1} & a_{2,2} & \cdots & a_{2,n}<br />\end{bmatrix} ,我们使用 (i,j) 表示矩阵中从上往下数第 i 行和从左往右数第 j 列的单元格、a_{i,j} 表示这个单元格的元素。
\hspace{15pt}在开始移动前,你可以进行至多一次操作:
\hspace{23pt}\bullet\,选择两个不同的整数 u,v \left(1 \leq u,v \leq n\right) ,随后交换第 u 列和第 v 列。

\hspace{15pt}现在,你位于 (1,1) ,你需要前往 (2,n) ,每一步你可以往下或者往右移动一个单元格(从 (x,y) 向下移动一格即抵达 (x+1,y) 、向右移动一格即抵达 (x,y+1) ),并且不能超出矩阵的范围。求解你所经过单元格的元素和的最大值。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 10^5\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行输入一个整数 n\left(1\leq n\leq 10^6\right) 代表矩阵列数。
\hspace{15pt}此后两行,第 i 行输入 n 个整数 a_{i,1},a_{i,2},\dots,a_{i,n}\left(-10^9\leq a_{i,j}\leq 10^9\right) 代表矩阵中第 i 行第 j 列的元素。

\hspace{15pt}除此之外,保证单个测试文件的 n 之和不超过 10^6

输出描述:

\hspace{15pt}对于每组测试数据,新起一行。输出一个整数,代表你所经过单元格的元素和的最大值。
示例1

输入

复制
1
5
1 2 4 5 6
2 5 4 6 9

输出

复制
32

说明

\hspace{15pt}对于第一组测试数据,交换第 1 列和第 5 列,则路径为 (1,1) \to (2,1) \to (2,2) \to (2,3) \to (2,4) \to (2,5)\begin{bmatrix}<br />{\color{orange}{\bf6}} & 2 & 4 & 5 & 1\\ <br />{\color{orange}{\bf9}} & {\color{orange}{\bf5}} & {\color{orange}{\bf4}} & {\color{orange}{\bf6}} & {\color{orange}{\bf2}}<br />\end{bmatrix} ,所经过单元格的元素和为 6+9+5+4+6+2=32