在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
//枚举高度[1,100000],>l的全部割掉,<l的砍掉最小的 #include<bits/stdc++.h> using namespace std; #define N 100005 #define ll long long struct Node{ll id,l,d;}a[N],b[N]; int cmp(Node a,Node b){ return a.l<b.l; } ll n,cnt[1000]; ll sum[N]; ll query(ll k){ if(k<0)return 0; ll res=0; for(int i=1;i<=200;i++){ if(k>cnt[i]){ res+=cnt[i]*i; k-=cnt[i]; }else if(k<=cnt[i]){ res+=k*i; break; } } return res; } int main(){ cin>>n; for(int i=1;i<=n;i++)cin>>a[i].l; for(int i=1;i<=n;i++) cin>>a[i].d,a[i].id=i; for(int i=1;i<=n;i++)b[i]=a[i]; sort(b+1,b+1+n,cmp); for(int i=1;i<=n;i++)sum[i]=sum[i-1]+b[i].d; ll ans=0x3f3f3f3f3f3f3f3f; for(int l=1,r;l<=n;l=r+1){ r=l; while(b[r+1].l==b[l].l)r++; ll tmp=sum[n]-sum[r],len=r-l+1; tmp+=query(r-(len*2-1)); ans=min(ans,tmp); for(int i=l;i<=r;i++) cnt[b[i].d]++; } cout<<ans<<endl; }
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论