Submission #466685

#TimeUsernameProblemLanguageResultExecution timeMemory
466685Valaki2Exam (eJOI20_exam)C++14
12 / 100
58 ms3516 KiB
#include <bits/stdc++.h> using namespace std; int n; vector<int> a; vector<int> b; void solve_bf() { } void solve_bequal() { int x = b[1]; int last = 0; bool ok = false; int ans = 0; a.push_back(x + 1); for(int i = 1; i <= (n + 1); ++i) { if(a[i] > x) { if(ok) { ans += i - last - 1; ok = false; } last = i; } else if(a[i] == x) { ok = true; } } cout << ans << "\n"; } void solve_astrictlyincreasing() { vector<int> dp(1 + n, 0); vector<int> last_equal(1 + n, 0); for(int i = 1; i <= n; ++i) { vector<int> cnt(1 + i + 1, 0); for(int j = i; j >= 1; --j) { cnt[j] = cnt[j + 1]; if(b[j] == a[i]) { ++cnt[j]; if(!last_equal[i]) last_equal[i] = j; } } for(int j = i; j >= 1; --j) { if(dp[i] < dp[j - 1] + cnt[last_equal[j - 1] + 1]) { dp[i] = dp[j - 1] + cnt[last_equal[j - 1] + 1]; last_equal[i] = max(last_equal[i], last_equal[j - 1]); } // dp[i] = max(dp[i], dp[j - 1] + cnt[last_equal[j - 1] + 1]); } // cout << i << ": " << last_equal[i] << " " << dp[i] << "\n"; } cout << dp[n] << "\n"; } void solve() { cin >> n; a.assign(1 + n, 0); b.assign(1 + n, 0); for(int i = 1; i <= n; ++i) cin >> a[i]; for(int i = 1; i <= n; ++i) cin >> b[i]; set<int> b_set; for(int i = 1; i <= n; ++i) { b_set.insert(b[i]); } /*if(n <= 10) { solve_bf(); } else */if(b_set.size() == 1) { solve_bequal(); } else { solve_astrictlyincreasing(); } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); 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...