Submission #1166880

#TimeUsernameProblemLanguageResultExecution timeMemory
1166880andrei_nExam (eJOI20_exam)C++20
65 / 100
433 ms99876 KiB
#include <bits/stdc++.h> using namespace std; int a[100005],b[100005]; int dp[5005][5005]; int rmq[14][5005]; int e[5005]; inline int query(const int &a, const int &b) { return max(rmq[e[b-a+1]][a], rmq[e[b-a+1]][b + 1 - (1<<e[b-a+1])]); } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i=1; i<=n; ++i) { cin>>a[i]; rmq[0][i] = a[i]; } for(int i=1; i<=n; ++i) cin>>b[i]; for(int i=1; i<14; ++i) for(int j=1; j+(1<<i)-1 <= n; ++j) rmq[i][j] = max(rmq[i-1][j], rmq[i-1][j+(1<<i-1)]); for(int i=2; i<=n; ++i) e[i] = e[i-1] + ((i & (i-1)) == 0); for(int i=1; i<=n; ++i) { for(int j=1; j<=n; ++j) { dp[i][j] = dp[i][j-1]; if(a[j] == query(min(i,j), max(i,j))) dp[i][j] = max(dp[i][j], dp[i-1][j] + (a[j] == b[i])); } } cout<<dp[n][n]; 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...