比赛 USACO2026 JAN G&P2 评测结果 AAAAAAAAAAAAAA
题目名称 Milk Buckets 最终得分 100
用户昵称 我常常追忆未来 运行时间 1.841 s
代码语言 C++ 内存使用 12.81 MiB
提交时间 2026-01-24 10:05:22
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int t,n;	
int a[N],b[N],l[N],r[N],hs[N];
struct BIT{
	int t[N];
	inline int lowbit(int x){
		return x&(-x);
	}
	void clear(){
		memset(t,0,sizeof(t));
	}
	void add(int x,int val){
		for(int i=x;i<=n;i+=lowbit(i)){
			t[i]+=val; 
		}
	}
	int ask(int x){
		int ans=0;
		for(int i=x;i;i-=lowbit(i)){
			ans+=t[i];
		}
		return ans;
	}
}bit;
signed main(){
	freopen("Milk.in","r",stdin);
	freopen("Milk.out","w",stdout);
	cin>>t;
	while(t--){
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(l,0,sizeof(l));
		memset(r,0,sizeof(r));
		memset(hs,0,sizeof(hs));		
		bit.clear();
		int ans=0;
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>a[i];
			b[i]=a[i];
		}		
		sort(b+1,b+n+1);
		int len=unique(b+1,b+n+1)-b-1;
		for(int i=1;i<=n;i++){
			hs[i]=lower_bound(b+1,b+len+1,a[i])-b;
		}	
		for(int i=1;i<=n;i++){
			l[i]=bit.ask(hs[i]-1);
			bit.add(hs[i],1);
		}
		bit.clear();
		for(int i=n;i>=1;i--){
			r[i]=bit.ask(hs[i]-1);
			bit.add(hs[i],1);
		}				
		for(int i=1;i<=n;i++){
			ans+=min(l[i],r[i]);
		}
		cout<<ans<<"\n";	
	}

	
	
	return 0;
}