TLE 60pts求助
查看原帖
TLE 60pts求助
251074
学习柯学楼主2023/10/16 22:37
#include<bits/stdc++.h>
using namespace std;
long long n, m, i, j, a[500005], b[500005], c[500005], add[500005], cdd, q, p, ans;
bool f[500005];
int main() {
	scanf("%d",&n);
	for(i=1; i<=n; i++) {
		scanf("%d",a+i);
	}
	for(i=1; i<=n; i++) {
		scanf("%d",b+i);
	}
	for(i=1; i<=n; i++) {
		scanf("%d",c+i);
	}
	for(i=1;i<=n;i++)
	{
		a[i]=min(a[i],a[i-1]+b[i]);
	}
	cin>>q;
	while(q--) {
		ans=100000000000999999999999;
		memset(f,0,sizeof(f));
		memset(add,0,sizeof(add));
		cdd=0;
		cin>>m;
		for(i=1; i<=m; i++) {
			cin>>p;
			f[p]=1;
		}
		for(i=1; i<=n; i++) {
			if(f[i]==1)
				add[i]+=add[i-1]+c[i];
			else
				add[i]=add[i-1];
		}
		for(i=n; i>=0; i--) {
			ans=min(ans,add[i]+a[i]+cdd);
			if(f[i]==0)
				cdd+=b[i];
		}
		cout<<ans<<endl;
	}
	return 0;
}

2023/10/16 22:37
加载中...