제출 #1134512

#제출 시각아이디문제언어결과실행 시간메모리
1134512ReLiceText editor (CEOI24_editor)C++20
0 / 100
1 ms328 KiB
#include <bits/stdc++.h> #define ll long long #define ld double #define pb push_back #define pf push_front #define ins insert #define fr first #define sc second #define endl "\n" #define ar array #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() using namespace std; void start(){ios_base::sync_with_stdio(NULL);cin.tie(nullptr);cout.tie(nullptr);} const ll inf = 1e18; const ll N = 1e6 + 8; ll sp[N][20]; void solve() { ll i, j; ll n; cin>>n; ll x[2], y[2]; for(i=0;i<2;i++) cin>>x[i]>>y[i]; ll l[n + 1]; l[0] = inf; for(i=1;i<=n;i++) cin>>l[i]; ll mn = min(y[0], y[1]); for(i=min(x[0], x[1]);i<=max(x[0], x[1]);i++){ mn = min(mn, l[i] + 1); } ll ans = y[0] - mn + y[1] - mn + abs(x[1] - x[0]); ll d[2][n + 1]; for(i=0;i<2;i++){ ll a = x[i], b = y[i]; ll mn = inf; d[i][1] = b - 1 + a - 1; for(j=a - 1;j>0;j--){ mn = min(mn, l[j] + 1); d[i][j + 1] = min(b - 1 + abs(j + 1 - a), max(0ll, mn - b) + 1 + abs(j - a)); } mn = inf; for(j=a;j<n;j++){ mn = min(mn, l[j] + 1); d[i][j + 1] = min(b - 1 + abs(j + 1 - a), max(0ll, mn - b) + 1 + abs(j - a)); } multiset<ll> prev, nxt; for(j=2;j<=n;j++){ nxt.ins(d[i][j] + j); } for(j=1;j<=n;j++){ if(nxt.size()) d[i][j] = min(d[i][j], *nxt.begin() - j); if(prev.size()) d[i][j] = min(d[i][j], *prev.begin() + j); if(j < n) nxt.erase(nxt.find(d[i][j + 1] + j + 1)); prev.ins(d[i][j] - j); } } for(i=1;i<=n;i++){ ans = min(ans, d[0][i] + abs(x[1] - i) + y[1] - 1); } ll a = x[1], b = y[1]; for(i=1;i<=n;i++) sp[i][0] = l[i] + 1; for(j=1;j<20;j++){ for(i=1;i<=n;i++){ sp[i][j] = min(sp[i][j - 1], sp[min(n, i + (1<<(j - 1)))][j - 1]); } } auto get_min = [&](ll l, ll r){ ll lg = __lg(r - l); return min(sp[l][lg], sp[r - (1<<lg) + 1][lg]); }; for(i=1;i<n;i++){ ans = min(ans, d[0][i + 1] + 1 + abs(a - i) + abs(get_min(min(i, a), max(i, a)) - b)); } cout<<ans<<endl; } signed main(){ start(); ll t = 1; //cin>>t; while(t--) solve(); } /* */
#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...