社区讨论
求优化,玄关
P14567【MX-S12-T2】区间参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mia2y1wn
- 此快照首次捕获于
- 2025/11/22 17:21 4 个月前
- 此快照最后确认于
- 2025/11/22 18:08 4 个月前
TLE 20pts
CPP#include<bits/stdc++.h>
using namespace std;
namespace IO{
char ibuf[(1<<20)+1],*iS,*iT;
#if ONLINE_JUDGE
#define gh() (iS==iT?iT=(iS=ibuf)+fread(ibuf,1,(1<<20)+1,stdin),(iS==iT?EOF:*iS++):*iS++)
#else
#define gh() getchar()
#endif
inline long long read(){
char ch=gh();
long long x=0;
bool t=0;
while(ch<'0'||ch>'9') t|=ch=='-',ch=gh();
while(ch>='0'&&ch<='9') x=x*10+(ch^48),ch=gh();
return t?-x:x;
}
inline char getc(){
char ch=gh();
while(ch<'a'||ch>'z') ch=gh();
return ch;
}
inline void print(long long x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9)print(x/10);
putchar(x%10+'0');
}
}
using IO::read;
using IO::getc;
using IO::print;
#define int long long
#define endl '\n'
int n,c[1000005],v[1000005],f[1000005],ans=1e18;
int mn=1e6;
struct node{
int l,r;
}a[1000005];
int oldl,oldr;
void fun(int &l,int &r){
oldl=oldr=0;
while(oldl!=l||oldr!=r){
oldl=l,oldr=r;
for(int i=l;i<=r;i++){
l=min(l,a[c[i]].l);
r=max(r,a[c[i]].r);
}
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
n=read();
for(int i=1;i<=n;i++)a[i].l=1e9,a[i].r=0;
for(int i=1;i<=n;i++)c[i]=read();
for(int i=1;i<=n;i++)v[i]=read();
for(int i=1;i<=n;i++)f[i]=read();
for(int i=1;i<=n;i++){
a[c[i]].l=min(a[c[i]].l,i);
a[c[i]].r=max(a[c[i]].r,i);
}
int l,r;
for(int i=1;i<=n;i++){
l=i,r=i;
fun(l,r);
if(mn>l-r+1)continue;
int s=0;
for(int j=l;j<=r;j++){
s+=1ll*v[j]*f[j-l+1];
}
ans=min(ans,s);
}
cout<<ans;
return 0;
}
求一些简单实用的时间优化
回复
共 0 条回复,欢迎继续交流。
正在加载回复...