#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<map>
#include<cmath>
#define ll long long
#define bug printf("SSS\n");
using namespace std;
const int maxn = 1e6 + 100;
ll a[maxn], n, f[maxn];
struct A {
ll val, p;
bool operator < (const A &t) const {
if(val == t.val) return p < t.p;
return val < t.val;
}
} b[maxn];
ll lowbit(ll x) {
return x & (-x);
}
void update(int id, ll x) {
while(id <= n) {
a[id] += x;
id += lowbit(id);
}
}
ll sum(int id) {
ll ans = 0;
while(id > 0) {
ans += a[id];
id -= lowbit(id);
}
return ans;
}
int main()
{
int t, c = 1;
scanf("%d", &t);
while(t--) {
scanf("%lld", &n);
memset(f, 0, sizeof f);
memset(a, 0, sizeof a);
for(ll i = 1; i <= n; i++) {
scanf("%lld", &b[i].val);
b[i].p = i;
}
ll ans = 0;
sort(b + 1, b + n + 1);
for(int i = 1; i <= n; i++) {
f[b[i].p] = i;
}
for(int i = 1; i <= n; i++) {
ans += sum(n) - sum(f[i]);
update(f[i], 1);
}
printf("Scenario #%d:\n", c++);
printf("%lld\n\n", ans);
}
return 0;
}
逆序数
最新推荐文章于 2019-01-05 22:12:55 发布