| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 41858 | baka24 | 【BJ】T3 | C++ | 通过 | 100 | 325 MS | 11372 KB | 1954 | 2026-06-03 15:46:19 |
#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fr first #define sc second #define mk make_pair #define pb push_back #define popcnt __builtin_popcount int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;} const int MAXN=200010,N=20,M=500,inf=1e18; int n,m,k,a[MAXN],d[MAXN],id[MAXN],f[MAXN]; pii v[MAXN]; vector<int>A[MAXN],B[MAXN]; void slv(){ n=read(),m=read(); for(int i=1;i<=n;i++)v[i].fr=read(),v[i].sc=i; sort(v+1,v+n+1); for(int i=1;i<=n;i++)id[v[i].sc]=i,d[i]=v[i+1].fr-v[i].fr; for(int i=1;i<=m;i++)a[i]=id[read()]; for(int i=1;i<=m;i++)A[a[i]].pb(read()); for(int i=1;i<=m;i++)a[i]=id[read()]; for(int i=1;i<=m;i++)B[a[i]].pb(read()); for(int i=1;i<=n;i++)sort(A[i].begin(),A[i].end(),greater<int>()),sort(B[i].begin(),B[i].end(),greater<int>()); int ans=0; while(m--){ int mx=inf,x=0,y=0; int v=inf,p=0; for(int i=1;i<=n;i++){ if(!A[i].empty()&&A[i].back()<v)p=i,v=A[i].back(); if(!B[i].empty()&&B[i].back()+v<mx)mx=B[i].back()+v,x=p,y=i; if(f[i]>=0)v+=d[i]; else v-=d[i]; } v=inf,p=0; for(int i=n;i>=1;i--){ if(!A[i].empty()&&A[i].back()<v)p=i,v=A[i].back(); if(!B[i].empty()&&B[i].back()+v<mx)mx=B[i].back()+v,x=p,y=i; if(f[i-1]<=0)v+=d[i-1]; else v-=d[i-1]; } ans+=mx; // cout<<x<<" "<<y<<" "<<mx<<endl; printf("%lld ",ans); A[x].pop_back(),B[y].pop_back(); if(x<y)for(int i=x;i<y;i++)f[i]++; else for(int i=y;i<x;i++)f[i]--; } } signed main(){ //freopen("1.in","r",stdin);freopen("1.out","w",stdout); slv(); // cerr<<clock()*1.0/CLOCKS_PER_SEC<<"s\n"; return 0; }