社区讨论

求优化,玄关

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 条回复,欢迎继续交流。

正在加载回复...