2020百度之星初赛三 Permutation(逆序对)

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

对于一个序列 AA,如果存在正整数 i, ji,j 使得 1 \leq i < j \leq n1≤i A[j]A[i]>A[j],则 \lt A[i], A[j] \gt 这个有序对称为 AA 的一个逆序对。

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

对于每组数据,一行两个整数 n,m~(1 \leq n \leq 1000000, 0 \leq m \leq 1000000)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 
#include 
#include 
#include 

using namespace std;

typedef long long ll;

double a[1005],b[1005],c[1005];

int main() {
    int T;scanf("%d",&T);
    while(T--) {
        ll n,m;scanf("%lld%lld",&n,&m);
        m = min(m,n / 2);
        ll ans = m * (2 * n - 3 + (2 * (n - 2 * m + 2) - 3)) / 2;
        printf("%lld\n",ans);
    }
    return 0;
}

你可能感兴趣的:(#,其他比赛题目,#,逆序对)