Submission #1138103

#TimeUsernameProblemLanguageResultExecution timeMemory
1138103VMaksimoski008Cat Exercise (JOI23_ho_t4)C++20
41 / 100
129 ms37004 KiB
#include <bits/stdc++.h> #define ar array //#define int long long using namespace std; using ll = long long; using pii = pair<int, int>; using pll = pair<ll, ll>; const int mod = 1e9 + 7; const int LOG = 20; const int maxn = 2e5 + 5; int n, P[maxn], T[maxn][20]; vector<int> G[maxn]; int mrg(int i, int j) { return P[i] > P[j] ? i : j; } int query(int l, int r) { int k = __lg(r-l+1); return mrg(T[l][k], T[r-(1<<k)+1][k]); } ll dnc(int l, int r, int p) { if(l == r) return 0; ll ans = 0; //oj levo if(p > l) { int p2 = query(l, p-1); ans = max(ans, p - p2 + dnc(l, p-1, p2)); } //oj desno if(p < r) { int p2 = query(p+1, r); ans = max(ans, p2 - p + dnc(p+1, r, p2)); } return ans; } signed main() { cin >> n; for(int i=1; i<=n; i++) cin >> P[i]; for(int i=1; i<=n; i++) T[i][0] = i; for(int j=1; j<20; j++) for(int i=1; i+(1<<j)-1<=n; i++) T[i][j] = mrg(T[i][j-1], T[i+(1<<(j-1))][j-1]); for(int i=0; i<n-1; i++) { int a, b; cin >> a >> b; G[a].push_back(b); G[b].push_back(a); } cout << dnc(1, n, query(1, n)) << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...