Submission #532406

#TimeUsernameProblemLanguageResultExecution timeMemory
532406OttoTheDinoSwap (BOI16_swap)C++17
68 / 100
66 ms18020 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,s,e) for (int i = s; i <= e; ++i) #define rrep(i,s,e) for (int i = s; i >= e; --i) #define pb push_back #define pf push_front #define fi first #define se second #define all(a) a.begin(), a.end() typedef long long ll; typedef pair<int, int> ii; typedef vector<ii> vii; typedef vector<int> vi; typedef vector<double> vd; typedef vector<string> vs; typedef vector<ll> vll; const int mx = 2e5; int a[2*mx+1]; map<ii, int> dp; int dfs2 (int u, int val) { if (dp[{u,val}]) return dp[{u,val}]; int mi = min(val, min(a[2*u], a[2*u+1])); if (mi==a[2*u+1]) { if (val < a[2*u]) dp[{u,val}] = min (dfs2(2*u, val), dfs2(2*u+1, val)) + 1; else if (dfs2(2*u, a[2*u]) <= dfs2 (2*u+1, a[2*u])) dp[{u,val}] = dfs2 (2*u+1, val) + 1; else dp[{u,val}] = dfs2 (2*u, val) + 1; } else if (mi==a[2*u]) dp[{u,val}] = dfs2 (2*u, val) + 1; else dp[{u,val}] = 1; return dp[{u,val}]; } void dfs (int u) { int mi = min(a[u], min(a[2*u], a[2*u+1])); if (a[2*u+1]==mi) { int mi2 = min(a[u], a[2*u]), ma = max(a[u], a[2*u]); int l = dfs2 (2*u, mi2), r = dfs2 (2*u+1, mi2); a[2*u] = mi2; a[2*u+1] = ma; if (l>r) swap (a[2*u], a[2*u+1]); } else if (a[2*u]==mi) a[2*u] = a[u]; a[u] = mi; if (a[2*u]!=1e9) dfs (2*u); if (a[2*u+1]!=1e9) dfs (2*u+1); } int main() { ios::sync_with_stdio(0); cin.tie(0); rep (i,1,2*mx) a[i] = 1e9; int n; cin >> n; rep (i,1,n) cin >> a[i]; dfs (1); rep (i,1,n) cout << a[i] << " \n"[i==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...