比赛 USACO2026 JAN G&P2 评测结果 AAAAAAAAAAAAAA
题目名称 Milk Buckets 最终得分 100
用户昵称 xuyuqing 运行时间 1.975 s
代码语言 C++ 内存使用 12.85 MiB
提交时间 2026-01-24 10:34:17
显示代码纯文本

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>

using namespace std;

const int N = 514514;

int t;
int n;
vector<int> nums;
vector<int> magic;
int le[N];
int ri[N];
long long res;
long long leTree[N];
long long riTree[N];

int lowbit (int id) {
	return id & (-id);
}

void add (int id, int num, long long *tree) {
	for (; id < N; id += lowbit (id)) {
		tree[id] += num;
	}
}

long long query (int id, long long *tree) {
	long long ans = 0;
	for (; id > 0; id -= lowbit (id)) {
		ans += tree[id];
	}
	return ans;
}

int main () {

	freopen ("Milk.in", "r", stdin);
	freopen ("Milk.out", "w", stdout);
	
	cin >> t;
	for (int index = 1; index <= t; index++) {
		cin >> n;
		int num;
		nums.clear();
		memset (leTree, 0, sizeof (leTree));
		memset (riTree, 0 ,sizeof (riTree));
		for (int i = 1; i <= n; i++) {
			cin >> num;
			nums.push_back(num);
		}
		magic = nums;
		sort (magic.begin(), magic.end());
		magic.erase(unique (magic.begin(), magic.end()), magic.end());

		for (int i = 0; i < n; i++) {
			int num = lower_bound(magic.begin(), magic.end(), nums[i]) - magic.begin() + 1;
			le[i + 1] = query(num - 1, leTree);
			add(num, 1, leTree);
		}
		for (int i = n - 1; i >= 0; i--) {
			int num = lower_bound(magic.begin(), magic.end(), nums[i]) - magic.begin() + 1;
			ri[i + 1] = query(num - 1, riTree);
			add(num, 1, riTree);
		}
		res = 0;
		for (int i = 1; i <= n; i++) {
			res += min (le[i], ri[i]);
		}
		cout << res << endl;
	}

	return 0;
}