permutation

Problem Description

一开始有 n个数,他们按 1...n的顺序排列,要求交换最多 m对数字(同一个数字可以参与多次交换),使得逆序对数目最大。

对于一个序列 A,如果存在正整数 i, j使得1≤i A[j],则 这个有序对称为 A 的一个逆序对。

Input

第一行一个正整数 test (1≤test≤100000) 表示数据组数。

对于每组数据,一行两个整数 n,m (1≤n≤1000000,0≤m≤1000000) 表示数字个数和最多可以交换的数字对数。

Output

对于每组数据,一行一个整数表示答案。

Sample Input

6
1 1
2 0
2 1
3 1
4 1
4 2

Sample Output

0
0
1
3
5
6
#include 
#include
#include 
#include 
#include 
#include 
using namespace std;

int main() {
	int test;
	cin >> test;
	while (test--) {
		long long int a;
		long long int b;
		scanf("%d", &a);
		scanf("%d", &b);
		if (2 * b <= a) {
			printf("%lld\n", (2 * a - 2 * b - 1) * b);
		}
		else {
			long long int c = a / 2;
			printf("%lld\n", (2 * a - 2 * c - 1) * c);
		}
	}
	return 0;
}

 

你可能感兴趣的:(permutation)