比赛 USACO2026 JAN G&P2 评测结果 AAAAAAAAAAAAAA
题目名称 Milk Buckets 最终得分 100
用户昵称 汐汐很希希 运行时间 1.520 s
代码语言 C++ 内存使用 5.21 MiB
提交时间 2026-01-24 10:39:59
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+10;
const int M=2e5+10;
const int MOD=1e9+7;
const int MAXX=2e9;
int T;
struct Node{
	int a,p;
}s[N];
bool cmp(Node &x,Node &y){
	if(x.a==y.a) return x.p<y.p;
	return x.a<y.a;
}
struct tree{
	int n;
	vector<ll> t;
	tree(int n1=0) { init(n1);}
    void init(int n1){
        n=n1;
        t.clear();
    	t.resize(n+1);
    	return;
    }
	void add(int x,ll v){
        for(;x<=n;x+=x&-x) t[x]+=v;
        return;
    }
    ll sum(int x){
        ll r=0;
        for(;x>0;x-=x&-x) r+=t[x];
        return r;
    }
};
int main()
{
    freopen("Milk.in","r",stdin);
    freopen("Milk.out","w",stdout);
    
	cin>>T;
	while(T--){
		ll n;
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>s[i].a;
			s[i].p=i;
		}
		tree c(n);
		sort(s+1,s+n+1,cmp);
		ll ans=0;
		for(int i=1;i<=n;i++){
			int j=i;
			while(j<=n&&s[i].a==s[j].a) j++;
			j--;
			for(int k=i;k<=j;k++){
				ll l=c.sum(s[k].p),r=i-1-l;
				ans+=min(l,r);
			}
			for(int k=i;k<=j;k++) c.add(s[k].p,1);
			i=j;
		}
		cout<<ans<<'\n';
	}
	return 0;
}