Submission #944924

#TimeUsernameProblemLanguageResultExecution timeMemory
944924vladiliusCat Exercise (JOI23_ho_t4)C++17
21 / 100
2047 ms16364 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int msz = 2e5 + 5;

vector<int> g[msz];

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n; cin>>n;
    vector<int> a(n + 1);
    int s = 0;
    for (int i = 1; i <= n; i++){
        cin>>a[i];
        if (a[i] == n){
            s = i;
        }
    }
    for (int i = 1; i < n; i++){
        int a, b; cin>>a>>b;
        if (a != i || b != (i + 1)){
            return 0;
        }
        g[a].push_back(b);
        g[b].push_back(a);
    }
    function<ll(int, int, int)> f = [&](int l, int r, int x){
        int ml = 0, mr = 0;
        for (int i = l; i < x; i++){
            if (a[i] > a[ml]){
                ml = i;
            }
        }
        for (int i = x + 1; i <= r; i++){
            if (a[i] > a[mr]){
                mr = i;
            }
        }
        ll out = 0;
        if (ml) out = max(out, f(l, x - 1, ml) + (x - ml));
        if (mr) out = max(out, f(x + 1, r, mr) + (mr - x));
        return out;
    };
    cout<<f(1, n, s)<<"\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...