Submission #1260475

#TimeUsernameProblemLanguageResultExecution timeMemory
1260475vlomaczkCat Exercise (JOI23_ho_t4)C++20
41 / 100
52 ms15940 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> typedef long long ll; using namespace __gnu_pbds; using namespace std; template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; ll base = 1<<18; vector<ll> t(2*base), poz(base); void update(ll x, ll val) { x+=base; t[x] = val; x/=2; while(x > 0) { t[x] = max(t[x+x], t[x+x+1]); x/=2; } } ll query(ll a, ll b) { a += base-1; b += base+1; ll ans = 0; while(a/2 != b/2) { if(a%2==0) ans = max(ans, t[a+1]); if(b%2==1) ans = max(ans, t[b-1]); a/=2; b/=2; } return ans; } ll ans(ll a, ll b) { ll val = query(a, b); ll mid = poz[val]; ll odp = 0; if(mid!=a) { odp = max(odp, mid-poz[query(a, mid-1)] + ans(a, mid-1)); } if(mid!=b) { odp = max(odp, poz[query(mid+1, b)]-mid + ans(mid+1, b)); } return odp; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n; cin >> n; for(ll i=0; i<n; ++i) { ll x; cin >> x; poz[x] = i; update(i, x); } cout << ans(0, n-1) << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...