제출 #769133

#제출 시각아이디문제언어결과실행 시간메모리
769133danikoynovCat Exercise (JOI23_ho_t4)C++14
21 / 100
24 ms608 KiB
#include<bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } const int maxn = 5010; int n, a[maxn], used[maxn], dp[maxn], pos[maxn]; int rec(int val) { if (used[val]) return dp[val]; used[val] = 1; int left = 0, right = n + 1; for (int i = n; i > val; i --) { if (pos[i] > pos[val]) { right = min(right, pos[i]); } else { left = max(left, pos[i]); } } int mx = -1; for (int i = pos[val] + 1; i < right; i ++) { if (a[i] > mx) { mx = a[i]; dp[val] = max(dp[val], i - pos[val] + rec(a[i])); } } mx = -1; for (int i = pos[val] - 1; i > left; i --) { if (a[i] > mx) { mx = a[i]; dp[val] = max(dp[val], pos[val] - i + rec(a[i])); } } return dp[val]; } void solve() { cin >> n; for (int i = 1; i <= n; i ++) { cin >> a[i]; pos[a[i]] = i; } for (int i = 1; i < n; i ++) { int v, u; cin >> v >> u; } cout << rec(n) << endl; } int 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...
#Verdict Execution timeMemoryGrader output
Fetching results...