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 |
|
|
| 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 |