提交时间:2026-06-03 20:03:22
运行 ID: 41925
#include<bits/stdc++.h> using namespace std; using ll=long long; const int N=1e5+10; int n,m; ll v[N],a[N],b[N],c[N],d[N],ans[N]; int p[N],ip[N]; int L[N],R[N];ll cost[N]; bool tag1[N],tag2[N]; vector<ll> vec1[N],vec2[N]; int main(){ //freopen("diliuti.in","r",stdin); //freopen("diliuti.out","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++) cin>>v[i]; for(int i=1;i<=m;i++) cin>>a[i]; for(int i=1;i<=m;i++) cin>>b[i]; for(int i=1;i<=m;i++) cin>>c[i]; for(int i=1;i<=m;i++) cin>>d[i]; for(int i=1;i<=n;i++) p[i]=i; sort(p+1,p+n+1,[&](int x,int y){return v[x]<v[y];}); for(int i=1;i<n;i++) cost[i]=v[p[i+1]]-v[p[i]]; for(int i=1;i<=n;i++) ip[p[i]]=i; for(int i=1;i<=m;i++){ vec1[ip[a[i]]].emplace_back(b[i]); vec2[ip[c[i]]].emplace_back(d[i]); } for(int i=1;i<=n;i++){ sort(vec1[i].begin(),vec1[i].end(),greater<ll>()); sort(vec2[i].begin(),vec2[i].end(),greater<ll>()); } ll ans=0; for(int T=1;T<=m;T++){ int xid=0,yid=0,id=0;ll val=1e18,mn=1e18,cst=0; id=0;mn=1e18;cst=0; for(int i=1;i<=n;i++){ cst+=(L[i-1])?-cost[i-1]:cost[i-1]; if(vec2[i].size()){ ll tmp=vec2[i].back()-cst; if(tmp<mn) mn=tmp,id=i; } if(vec1[i].size()){ ll tmp=vec1[i].back()+cst+mn; if(tmp<val) val=tmp,xid=i,yid=id; } } for(int i=n;i>=1;i--){ cst+=(R[i])?-cost[i]:cost[i]; if(vec2[i].size()){ ll tmp=vec2[i].back()-cst; if(tmp<mn) mn=tmp,id=i; } if(vec1[i].size()){ ll tmp=vec1[i].back()+cst+mn; if(tmp<val) val=tmp,xid=i,yid=id; } } ans+=val; vec1[xid].pop_back();vec2[yid].pop_back(); if(xid<yid){ for(int i=xid;i<yid;i++) if(R[i]) R[i]--;else L[i]++; }else{ for(int i=yid;i<xid;i++) if(L[i]) L[i]--;else R[i]++; }cout<<ans<<' '; }cout<<'\n'; return 0; }