Submission #1321434

#TimeUsernameProblemLanguageResultExecution timeMemory
1321434ereringExam (eJOI20_exam)C++20
13 / 100
366 ms197520 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' #define pb push_back const int N=1e5+5,MAXA=1e6+5,inf=1e9,MOD=1e9+7; int n,a[N],b[N],lft[N],rt[N],dp[N],suff[5005][5005]; vector<int> posb[N],posa[N]; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; deque<pair<int,int>> dq={{inf,0}}; set<int> comp; for(int i=1;i<=n;i++){ cin>>a[i]; comp.insert(a[i]); } for(int i=1;i<=n;i++)cin>>b[i]; map<int,int> id; int cnt=1; for(auto i:comp)id[i]=cnt++; for(int i=1;i<=n;i++){ a[i]=id[a[i]]; while(a[i]>=dq.back().first)dq.pop_back(); lft[i]=dq.back().second+1; dq.pb({a[i],i}); posa[a[i]].pb(i); } dq={{inf,n+1}}; for(int i=n;i>0;i--){ while(a[i]>=dq.front().first)dq.pop_front(); rt[i]=dq.front().second-1; dq.push_front({a[i],i}); } for(int i=1;i<=n;i++){ b[i]=id[b[i]]; posb[b[i]].pb(i); } for(int i=n;i>0;i--){ suff[b[i]][i]++; for(int j=1;j<=n;j++)suff[j][i]+=suff[j][i+1]; } /* * dp[j]=max(dp[j],dp[k]+#of matches of a[i] from (k+1 to j) * #of matches from k+1 to j = suff[a[i]][k+1]-suff[a[i]][j+1] * dp[k]+suff[a[i]][k+1]-suff[a[i]][j+1] * maximize dp[k]+suff[a[i]][k+1] */ for(int i=1;i<=n;i++){ int mx=-inf; for(int j=lft[i];j<i;j++){ mx=max(mx,dp[j-1]+suff[a[i]][j]); dp[j]=max(dp[j],mx-suff[a[i]][j+1]); } dp[i]=dp[i-1]+(a[i]==b[i]); } cout<<dp[n]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...