Submission #1321956

#TimeUsernameProblemLanguageResultExecution timeMemory
1321956888313666Exam (eJOI20_exam)C++20
0 / 100
1095 ms2196 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define _ <<' '<< #define print(x) cout<<#x<<": "<<(x)<<'\n' int n, res=0; vector<int> a, b, lf, rt, dp; stack<int> s; int main(){ cin.tie(0)->sync_with_stdio(0); cout.tie(0); cin>>n; a.resize(n); b.resize(n); lf.assign(n, 0); rt=lf; for (int i=0; i<n; i++) cin>>a[i]; for (int i=0; i<n; i++) cin>>b[i]; for (int i=0; i<n; i++) { while (!s.empty() && a[s.top()]<=a[i]) s.pop(); if (s.empty()) lf[i]=0; else lf[i]=s.top()+1; s.push(i); } s={}; for (int i=n-1; i>=0; --i) { while (!s.empty() && a[s.top()]<=a[i]) s.pop(); if (s.empty()) rt[i]=n-1; else rt[i]=s.top()-1; s.push(i); } s={}; dp.assign(n+1, 0); for (int i=0; i<n; i++) { int mx=0; for (int j=0; j<n; j++) { mx=max(mx, dp[j+1]); if (a[j]==b[i] && lf[j]<=i && i<=rt[j]) dp[j+1]=max(dp[j+1], mx+1); res=max(res, dp[j]); } } cout<<res<<'\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...