Submission #1220468

#TimeUsernameProblemLanguageResultExecution timeMemory
1220468KindaGoodGamesText editor (CEOI24_editor)C++20
0 / 100
4097 ms197432 KiB
// #pragma GCC optimize("O3, unroll-loops, Ofast") // #pragma GCC target("avx2") #include<bits/stdc++.h> using namespace std; // #define int long long #define pii pair<int,int> #define tiii tuple<int,int,int> int INF = numeric_limits<int>::max()/2; struct cvec{ vector<int> v; int n; int m; cvec(int n, int m, int init){ this->n = n; this->m = m; v.resize(n*m, init); } int get(int i, int j){ return v[(i*m)+j]; } void set(int i, int j, int d){ v[(i*m)+j] = d; } }; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n; int sr, sc; int er, ec; cin >> n; cin >> sr >> sc; cin >> er >> ec; sr--;sc--; er--;ec--; if(er < sr){ swap(er,sr); swap(ec,sc); } vector<int> arr(n); for(int i = 0; i < n; i++){ cin >> arr[i]; } set<int> important; for(int i = 0; i < n; i++){ important.insert(arr[i]); } important.insert(sc); important.insert(ec); important.insert(INF); important.insert(-INF); vector<int> pos(important.begin(),important.end()); map<int,int> toInd; for(int i = 0; i < pos.size(); i++){ toInd[pos[i]] = i; } priority_queue<tiii,vector<tiii>, greater<tiii>> pq; cvec dist(n, pos.size(), INF); pq.push({0,sr,sc}); int iter = 0; while(pq.size()){ int d,r,c; tie(d,r,c) = pq.top(); pq.pop(); if(dist.get(r,toInd[c]) < d) continue; dist.set(r,toInd[c],d); // if(r == er && ec == c) break; int nxt = *upper_bound(pos.begin(),pos.end(), c); auto it = lower_bound(pos.begin(),pos.end(), c); int prev =-INF; if(it != pos.begin()){ it--; prev= *it; }else{ prev = -INF; } // horizontal if(prev >= 0) pq.push({abs(c-prev)+d,r,prev}); else if(r-1 >= 0){ pq.push({d+1,r-1,arr[r-1]}); } if(nxt <= arr[r]) pq.push({abs(c-nxt)+d,r,nxt}); else if(r+1 < n){ pq.push({d+1,r+1,0}); } // vertical if(r > 0) pq.push({d+1,r-1,min(c,arr[r-1])}); if(r+1 < n) pq.push({d+1,r+1,min(c,arr[r+1])}); } cout << dist.get(er,toInd[ec]) << "\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...