Submission #1253733

#TimeUsernameProblemLanguageResultExecution timeMemory
1253733onur8ocakExam (eJOI20_exam)C++20
65 / 100
1095 ms6212 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int N=2e5+5; void solve(){ int n; cin >> n; int a[N+5],b[N+5]; for(int i=1;i<=n;i++){ cin >> a[i]; } for(int i=1;i<=n;i++){ cin >> b[i]; } stack<int> s; int l[n+5],r[n+5]; for(int i=1;i<=n;i++){ while(s.size()&&a[s.top()]<=a[i]){ s.pop(); } if(s.size()){ l[i]=s.top(); } else{ l[i]=0; } s.push(i); } stack<int> ss; for(int i=n;i>=1;i--){ while(ss.size()&&a[ss.top()]<=a[i]){ ss.pop(); } if(ss.size()){ r[i]=ss.top(); } else{ r[i]=n+1; } ss.push(i); } //for(int i=1;i<=4;i++){ // cout << l[i] << r[i] << endl; //} vector<int> dp(n+5,0); int ans=0; for(int i=1;i<=n;i++){ int mx=0; for(int j=1;j<=n;j++){ mx=max(mx,dp[j]); if(l[j]<i&&i<r[j]&&a[j]==b[i]){ dp[j]=mx+1; } ans=max(ans,dp[j]); } } //for(int i=1;i<=n;i++){ // ans=max(ans,dp[i]); //} cout << ans << endl; } int32_t main(){ solve(); return 0; }
#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...