Source Code
#include <bits/stdc++.h>

using namespace std ;

const long long inf = 1e18 ;
const int MAX = 1e6 + 10 ;

int a[MAX] , cost[MAX] , b[MAX] ;
int pos[MAX] ;
int n , m ;

long long dp[MAX] ;

int main()
{
	ios_base::sync_with_stdio(0) ;
	cin.tie(0) ;
	cin>>n>>m ;
	for(int i = 1 ; i <= n ; ++i)
		cin>>a[i] ;
	for(int i = 1 ; i <= n ; ++i)
		cin>>cost[i] ;
	for(int i = 1 ; i <= m ; ++i)
	{
		cin>>b[i] ;
		pos[b[i]] = i ;
	}
	for(int i = 1 ; i <= m ; ++i)
		dp[i] = -inf ;
	long long ans = 0 ;
	dp[0] = 0 ;
	for(int i = 1 ; i <= n ; ++i)
	{
		cost[i] = min(0 , cost[i]) ;
		ans += cost[i] ;
		if(!pos[a[i]])
			continue ;
		dp[pos[a[i]]] = max(dp[pos[a[i]]] , dp[pos[a[i]]-1] + cost[i]) ;
	}
	return cout<<ans - dp[m]<<"\n" , 0 ;
}
Copy
Always with Me, Always with You Bakry_
GNU G++17
169 ms
13.8 MB
Accepted