| 比赛 |
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;
}