比赛 USACO2026 JAN G&P2 评测结果 AAAAAAAAAAAAAA
题目名称 Milk Buckets 最终得分 100
用户昵称 Ruyi 运行时间 1.719 s
代码语言 C++ 内存使用 8.47 MiB
提交时间 2026-01-24 11:44:09
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define N 200001
using namespace std;
ll n,tt,a[N],r[N],t[N],cl[N],cr[N];
vector<int> v;
void u(int p,int val){
    while(p<N){
        t[p]+=val;
        p+=p&-p;
    }
    return ;
}
ll q(int p){
    ll res=0;
    while(p>0){
        res+=t[p];
        p-=p&-p;
    }
    return res;
}
void f(){
    v.clear();
    for(int i=1;i<=n;i++) v.push_back(a[i]);
    sort(v.begin(),v.end());
    v.erase(unique(v.begin(),v.end()),v.end());
    for(int i=1;i<=n;i++) r[i]=lower_bound(v.begin(),v.end(),a[i])-v.begin()+1; 
    return ;
}
int main(){
    freopen("Milk.in","r",stdin);
    freopen("Milk.out","w",stdout);
    cin>>tt;
    while(tt--){
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i];
        f();
        memset(t,0,sizeof(t));
        for(int i=1;i<=n;i++){
            int x=r[i];
            cl[i]=q(x-1);
            u(x,1);
        }
        memset(t,0,sizeof(t));
        for(int i=n;i>0;i--){
            int x=r[i];
            cr[i]=q(x-1);
            u(x,1);
        }
        ll ans=0;
        for(int i=1;i<=n;i++) ans+=min(cl[i],cr[i]);
        cout<<ans<<'\n';
    }
    return 0;
}