记录编号 |
605452 |
评测结果 |
TTTTTTTTTWAWWTAAAWWT |
题目名称 |
4019.呜呜呜 |
最终得分 |
20 |
用户昵称 |
李奇文 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
21.572 s |
提交时间 |
2025-09-01 17:38:39 |
内存使用 |
42.82 MiB |
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
int n,a[N],b[N],c[N],f[N],ff[N];
bool t[N];
int find(int x){
return f[x]==x?x:f[x]=find(f[x]);
}
void check(int x,int y,int &ans,int cc){
x=find(x),y=find(y);
if(x==y) return;
ans=max(ans,a[x]*b[y]*cc);
ans=max(ans,a[y]*b[x]*cc);
if(a[x]<a[y]){
f[x]=y;
a[y]=max(a[y],a[x]);
b[y]=max(b[y],b[x]);
}else{
f[y]=x;
a[x]=max(a[x],a[y]);
b[x]=max(b[x],b[y]);
}
}
signed main(){
//std::ios::sync_with_stdio(false);
//std::cin.tie(nullptr);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=n;i++) cin>>c[i];
for(int i=1;i<=n;i++){
ff[i]=i;
f[i]=i;
}
sort(ff+1,ff+1+n,[&](int i,int j){
return c[i]>c[j];
});
int ans=0;
for(int i=1;i<=n;i++){
int d=ff[i];
t[d]=1;
if(d>1&&t[d-1]) check(d,d-1,ans,c[d]);
if(d<n&&t[d+1]) check(d,d+1,ans,c[d]);
}
cout<<ans<<"\n";
return 0;
}