Submission #25183164


Source Code Expand

#include <bits/stdc++.h>

using namespace std;

template <class T> struct SparseTable {
	std::vector<T> v;
	std::vector<std::vector<int>> jump;
	int type = 1;

	int level(int x) { return 31 - __builtin_clz(x); }

	int comb(int a, int b) {
		return v[a] == v[b] ? std::min(a, b) : (type * v[a] < type * v[b] ? a : b);
	}

	void init(const std::vector<T>& _v) {
		v = _v;
		jump = {std::vector<int>((int)v.size())};
		iota(jump[0].begin(), jump[0].end(), 0);
		for (int j = 1; (1 << j) <= (int)v.size(); j++) {
			jump.push_back(std::vector<int>((int)v.size() - (1 << j) + 1));
			for (int i = 0; i < (int)jump[j].size(); i++) {
				jump[j][i] = comb(jump[j - 1][i], jump[j - 1][i + (1 << (j - 1))]);
			}
		}
	}

	int index(int l, int r) {
		assert(l <= r);
		int d = level(r - l + 1);
		return comb(jump[d][l], jump[d][r - (1 << d) + 1]);
	}

	T query(int l, int r) {
		return v[index(l, r)];
	}
};

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);	
	long long INF = 1e18;
	int n;
	cin >> n;
	vector<long long> a(n);
	for (int i = 0; i < n; ++i) {
		cin >> a[i];
	}
	sort(a.begin(), a.end());
	vector<long long> tmp;
	SparseTable<long long> mnst, mxst;
	mxst.type = -1;
	mnst.init(a);
	mxst.init(a);
	long long ans = mxst.query(0, n - 1) - mnst.query(0, n - 1);
	vector<vector<array<long long, 2>>> st(n, vector<array<long long, 2>>(n, {-INF, INF}));
	for (int c = 0; c < n - 1; ++c) {
		for (int l = c; l >= 0; --l) {
			int r = c - l + c + 1;
			if (r >= n) {
				break;
			}
			st[l][r] = st[l + 1][r - 1];
			st[l][r][0] = max(st[l][r][0], a[l] + a[r]);
			st[l][r][1] = min(st[l][r][1], a[l] + a[r]);
		}
	}
	for (int len = 0; len <= n / 2; ++len) {
		long long mx = -INF;
		long long mn = INF;
		for (int i = 0; i < len; ++i) {
			long long v = a[i] + a[n - 1 - i];
			mx = max(mx, v);
			mn = min(mn, v);
		}
		for (int i = len + 1; i <= n - 1 - len; i += 2) {
			long long lo = mn;
			long long hi = mx;
			int l = i + 1;
			int r = n - 1 - len;
			if (l <= r) {
				lo = min(lo, mnst.query(l, r));
				hi = max(hi, mxst.query(l, r));
			}
			lo = min(lo, st[len][i][1]);
			hi = max(hi, st[len][i][0]);
			ans = min(ans, hi - lo);
		}
		for (int i = n - 1 - len - 1; i >= len; i -= 2) {
			long long lo = mn;
			long long hi = mx;
			int l = len;
			int r = i - 1;
			if (l <= r) {
				lo = min(lo, mnst.query(l, r));
				hi = max(hi, mxst.query(l, r));
			}
			lo = min(lo, st[i][n - 1 - len][1]);
			hi = max(hi, st[i][n - 1 - len][0]);
			ans = min(ans, hi - lo);
		}
		if (len <= n - 1 - len) {
			mx = max(mx, mxst.query(len, n - 1 - len));
			mn = min(mn, mnst.query(len, n - 1 - len));
		}
		ans = min(ans, mx - mn);
	}
	cout << ans << '\n';
	return 0;
}

/**
 * [l, r]
 * pairing must be opposite
 * a <= b <= c <= d
 * a, c, single
 * a, c, b + d
 * a + d, b + c
 */ 

Submission Info

Submission Time
Task D - 1 or 2
User tqian
Language C++ (GCC 9.2.1)
Score 700
Code Size 2916 Byte
Status AC
Exec Time 447 ms
Memory 394640 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 3
AC × 55
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt, random_30.txt, random_31.txt, random_32.txt, random_33.txt, random_34.txt, random_35.txt, random_36.txt, random_37.txt, random_38.txt, random_39.txt, random_40.txt, sample_01.txt, sample_02.txt, sample_03.txt, sign_01.txt, sign_02.txt, sign_03.txt, sign_04.txt, sign_05.txt, sign_06.txt, sign_07.txt, sign_08.txt, sign_09.txt, sign_10.txt, sign_11.txt, sign_12.txt
Case Name Status Exec Time Memory
random_01.txt AC 425 ms 394628 KiB
random_02.txt AC 422 ms 394508 KiB
random_03.txt AC 419 ms 394596 KiB
random_04.txt AC 419 ms 394640 KiB
random_05.txt AC 420 ms 394596 KiB
random_06.txt AC 419 ms 394600 KiB
random_07.txt AC 419 ms 394528 KiB
random_08.txt AC 420 ms 394640 KiB
random_09.txt AC 421 ms 394600 KiB
random_10.txt AC 423 ms 394596 KiB
random_11.txt AC 144 ms 124788 KiB
random_12.txt AC 162 ms 140712 KiB
random_13.txt AC 68 ms 55972 KiB
random_14.txt AC 421 ms 365380 KiB
random_15.txt AC 248 ms 215380 KiB
random_16.txt AC 151 ms 122696 KiB
random_17.txt AC 337 ms 297976 KiB
random_18.txt AC 396 ms 336028 KiB
random_19.txt AC 286 ms 240064 KiB
random_20.txt AC 41 ms 32368 KiB
random_21.txt AC 170 ms 138436 KiB
random_22.txt AC 21 ms 16368 KiB
random_23.txt AC 122 ms 100592 KiB
random_24.txt AC 447 ms 388436 KiB
random_25.txt AC 264 ms 233224 KiB
random_26.txt AC 376 ms 322256 KiB
random_27.txt AC 218 ms 182956 KiB
random_28.txt AC 236 ms 201896 KiB
random_29.txt AC 5 ms 3660 KiB
random_30.txt AC 178 ms 155188 KiB
random_31.txt AC 10 ms 6800 KiB
random_32.txt AC 3 ms 4116 KiB
random_33.txt AC 2 ms 3740 KiB
random_34.txt AC 2 ms 3600 KiB
random_35.txt AC 2 ms 3728 KiB
random_36.txt AC 6 ms 5108 KiB
random_37.txt AC 3 ms 3796 KiB
random_38.txt AC 7 ms 3852 KiB
random_39.txt AC 7 ms 4400 KiB
random_40.txt AC 2 ms 4184 KiB
sample_01.txt AC 2 ms 3464 KiB
sample_02.txt AC 2 ms 3536 KiB
sample_03.txt AC 2 ms 3496 KiB
sign_01.txt AC 421 ms 394516 KiB
sign_02.txt AC 419 ms 394596 KiB
sign_03.txt AC 421 ms 394616 KiB
sign_04.txt AC 420 ms 394632 KiB
sign_05.txt AC 109 ms 88936 KiB
sign_06.txt AC 132 ms 109940 KiB
sign_07.txt AC 319 ms 277372 KiB
sign_08.txt AC 59 ms 46324 KiB
sign_09.txt AC 10 ms 6344 KiB
sign_10.txt AC 3 ms 3880 KiB
sign_11.txt AC 3 ms 4380 KiB
sign_12.txt AC 12 ms 6428 KiB