小红的差值构造 - easy+hard+extreme
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld

题目描述

~~~~~~小红有一个长度为 n 的数组 \{1,2,\dots,n\} 和一个整数 l ,她想找到这样两个整数 xy ,满足 y - x = l ,记 f_i=\min\big\{|a_i - x|, |a_i - y| \big\} ,使得 f_1+f_2+\dots+f_n 最小。
~~~~~~你需要输出满足条件的 xy ,以及这个最小值。

输入描述:

~~~~~~每个测试文件均包含多组测试数据。

~~~~~~对于简单版本,范围如下,你至多可以从中获取 \sf 70 分(含样例)
~~~~~~第一行输入一个整数 T\left(1\le T\le 5\right) 代表数据组数,每组测试数据描述如下:
~~~~~~在一行上输入两个整数 n,l \left( 1 \le n,l \le 20 \right) 代表数组长度、构造限制。

~~~~~~对于困难版本,范围如下,你至多可以从中获取 \sf 163.33 分(含样例):
~~~~~~第一行输入一个整数 T\left(1\le T\le 5\right) 代表数据组数,每组测试数据描述如下:
~~~~~~在一行上输入两个整数 n,l \left( 1 \le n,l \le 2 \times 10^6 \right) 代表数组长度、构造限制。

~~~~~~对于极限版本,范围如下,你至多可以从中获取 \sf 350 分(含样例)
~~~~~~第一行输入一个整数 T\left(1\le T\le 2 \times 10^5\right) 代表数据组数,每组测试数据描述如下:
~~~~~~在一行上输入两个整数 n,l \left( 1 \le n,l \le 2 \times 10^6 \right) 代表数组长度、构造限制。

输出描述:

~~~~~~对于每一组测试数据,在一行上输出三个整数,代表满足条件的 xy ,以及最小的 \sum f

~~~~~~如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
~~~~~~在几乎全部的情况下,\sf PyPy 的运行速度优于 \sf Python ,我们建议您选择对应版本的 \sf PyPy 进行提交、而不是 \sf Python
示例1

输入

复制
3
3 1
3 1
3 5

输出

复制
2 3 1
1 2 1
-3 2 2

说明

~~~~~~对于第一组测试样例,\begin{cases}<br />f_1= \min \big\{ |1 - 2|, |1 - 3| \big\} = 1<br />\\<br />f_2=  \min \big\{ |2 - 2|, |2 - 3| \big\} = 0<br />\\<br />f_3=  \min \big\{ |3 - 2|, |3 - 3| \big\} = 0 <br />\end{cases} ,可以证明 \sum f = 1 是最小的答案。