Submission #1358977

#TimeUsernameProblemLanguageResultExecution timeMemory
1358977pinbuSwap (BOI16_swap)C++20
0 / 100
0 ms344 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 200005, oo = 1e9 + 7;

int n, x[N << 1];
#define do1() swap(x[Li], x[i]);
#define do2() swap(x[Ri], x[i]);

signed main(void) {
    ios::sync_with_stdio(false); cin.tie(nullptr);
    
    cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> x[i];
	}
	for (int i = 1; i <= n / 2; i++) {
		int Li = i << 1, Ri = i << 1 | 1;
		if (Ri > n) {
			if (x[i] > x[Li]) do1();
		} else if (x[i] < min(x[Li], x[Ri])) continue;
		else if (x[Li] < x[i]) {
			if (x[Ri] < x[Li]) {
				// should I swap x[i] and x[Li]?
				int LL = i << 2, LR = i << 2 | 1;
				int minv = min({x[Li], LL <= n ? x[LL] : oo, LR <= n ? x[LR] : oo});
				if (minv == min(LL <= n ? x[LL] : oo, LR <= n ? x[LR] : oo)) do1();
				do2();
			} else do1();
		} else {
			int LL = i << 2, LR = i << 2 | 1;
			int minv = min({x[i], LL <= n ? x[LL] : oo, LR <= n ? x[LR] : oo});
			if (minv == x[i]) do1();
			do2();
		}
	}
	for (int i = 1; i <= n; i++) cout << x[i] << ' ';
    
    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...