提出 #42959371
ソースコード 拡げる
// LUOGU_RID: 113310813
#include <bits/stdc++.h>
#define SZ(x) (int) x.size() - 1
#define all(x) x.begin(), x.end()
#define ms(x, y) memset(x, y, sizeof x)
#define F(i, x, y) for (int i = (x); i <= (y); i++)
#define DF(i, x, y) for (int i = (x); i >= (y); i--)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
template <typename T> void chkmax(T& x, T y) { x = max(x, y); }
template <typename T> void chkmin(T& x, T y) { x = min(x, y); }
template <typename T> void read(T &x) {
x = 0; int f = 1; char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';
x *= f;
}
const int N = 2e5 + 10;
int n, a[N], t[N * 33][2], tot = 1, sz[N * 33], s;
void insert(int x) {
int num = 1; sz[1]++;
DF(i, 30, 0) {
int k = (x >> i) & 1;
// if (i == 8) cout << k << '\n';
if (!t[num][k]) t[num][k] = ++tot;
num = t[num][k];
sz[num]++;
}
}
int query(int num1, int num2, int d, int x) {
if (!num1 || !num2) return 0;
if (d < 0) return min(sz[num1], sz[num2]);
if (x & (1 << d)) return query(t[num1][0], t[num2][1], d - 1, x) + query(t[num1][1], t[num2][0], d - 1, x);
int a = query(t[num1][0], t[num2][0], d - 1, x), b = query(t[num1][1], t[num2][1], d - 1, x);
// cout << "# " << d << " " << a << " " << b << endl;
// if (sz[t[num1][0]] - a < sz[t[num2][1]] - b && )
return a + b + min(sz[t[num1][0]] - a, sz[t[num2][1]] - b) + min(sz[t[num1][1]] - b, sz[t[num2][0]] - a)
+ max(0, min(a, min(sz[t[num2][1]] - b - (sz[t[num1][0]] - a), sz[t[num1][1]] - b - (sz[t[num2][0]] - a))))
+ max(0, min(b, min(sz[t[num1][0]] - a - (sz[t[num2][1]] - b), sz[t[num2][0]] - a - (sz[t[num1][1]] - b))));
}
int dp(int num, int d, int x) {
if (!num) return 0;
assert(d >= 0);
// if (d == 0) return sz[num];
// cout << "! " << d << " " << (x & (1 << d)) << " " << d << " " << num << " " << t[num][0] << " " << t[num][1] << " " << sz[t[num][0]] << " " << sz[t[num][1]] << endl;
if (x & (1 << d)) return sz[num] - 2 * query(t[num][0], t[num][1], d - 1, x);
int ls = dp(t[num][0], d - 1, x), rs = dp(t[num][1], d - 1, x);
if (sz[t[num][0]] < rs) return rs - sz[t[num][0]];
if (ls > sz[t[num][1]]) return ls - sz[t[num][1]];
return 0;
}
bool check(int x) {
int ans = dp(1, 30, x);
// cout << sz[1] << " " << ans << endl;
return ans <= ((n / 2) * 2);
}
signed main() {
read(n);
F(i, 1, 2 * n) {
read(a[i]);
insert(a[i]);
} int l = 0, r = (1 << 30);
// cout << check(8) << endl; return 0;
while (l + 1 < r) {
int mid = (l + r) >> 1;
if (check(mid)) l = mid;
else r = mid;
} cout << l;
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
G - Max of Medians |
| ユーザ |
ast123 |
| 言語 |
C++ (GCC 9.2.1) |
| 得点 |
625 |
| コード長 |
2608 Byte |
| 結果 |
AC |
| 実行時間 |
794 ms |
| メモリ |
35984 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
625 / 625 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample00.txt, sample01.txt, sample02.txt |
| All |
sample00.txt, sample01.txt, sample02.txt, testcase00.txt, testcase01.txt, testcase02.txt, testcase03.txt, testcase04.txt, testcase05.txt, testcase06.txt, testcase07.txt, testcase08.txt, testcase09.txt, testcase10.txt, testcase11.txt, testcase12.txt, testcase13.txt, testcase14.txt, testcase15.txt, testcase16.txt, testcase17.txt, testcase18.txt, testcase19.txt, testcase20.txt, testcase21.txt, testcase22.txt, testcase23.txt, testcase24.txt, testcase25.txt, testcase26.txt, testcase27.txt, testcase28.txt, testcase29.txt, testcase30.txt, testcase31.txt, testcase32.txt, testcase33.txt, testcase34.txt, testcase35.txt, testcase36.txt, testcase37.txt, testcase38.txt, testcase39.txt, testcase40.txt, testcase41.txt, testcase42.txt, testcase43.txt, testcase44.txt, testcase45.txt, testcase46.txt, testcase47.txt, testcase48.txt, testcase49.txt, testcase50.txt, testcase51.txt, testcase52.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| sample00.txt |
AC |
12 ms |
3476 KiB |
| sample01.txt |
AC |
2 ms |
3464 KiB |
| sample02.txt |
AC |
7 ms |
3556 KiB |
| testcase00.txt |
AC |
4 ms |
3400 KiB |
| testcase01.txt |
AC |
2 ms |
3496 KiB |
| testcase02.txt |
AC |
2 ms |
3428 KiB |
| testcase03.txt |
AC |
24 ms |
4276 KiB |
| testcase04.txt |
AC |
23 ms |
4212 KiB |
| testcase05.txt |
AC |
684 ms |
35924 KiB |
| testcase06.txt |
AC |
738 ms |
35928 KiB |
| testcase07.txt |
AC |
791 ms |
35832 KiB |
| testcase08.txt |
AC |
689 ms |
35984 KiB |
| testcase09.txt |
AC |
741 ms |
35924 KiB |
| testcase10.txt |
AC |
794 ms |
35904 KiB |
| testcase11.txt |
AC |
27 ms |
4332 KiB |
| testcase12.txt |
AC |
25 ms |
4200 KiB |
| testcase13.txt |
AC |
152 ms |
15860 KiB |
| testcase14.txt |
AC |
174 ms |
16860 KiB |
| testcase15.txt |
AC |
158 ms |
16156 KiB |
| testcase16.txt |
AC |
179 ms |
16904 KiB |
| testcase17.txt |
AC |
156 ms |
15928 KiB |
| testcase18.txt |
AC |
177 ms |
16924 KiB |
| testcase19.txt |
AC |
173 ms |
16660 KiB |
| testcase20.txt |
AC |
181 ms |
16864 KiB |
| testcase21.txt |
AC |
159 ms |
16248 KiB |
| testcase22.txt |
AC |
184 ms |
17064 KiB |
| testcase23.txt |
AC |
180 ms |
16984 KiB |
| testcase24.txt |
AC |
183 ms |
16964 KiB |
| testcase25.txt |
AC |
163 ms |
16236 KiB |
| testcase26.txt |
AC |
169 ms |
17012 KiB |
| testcase27.txt |
AC |
184 ms |
16840 KiB |
| testcase28.txt |
AC |
208 ms |
19284 KiB |
| testcase29.txt |
AC |
283 ms |
18028 KiB |
| testcase30.txt |
AC |
210 ms |
18340 KiB |
| testcase31.txt |
AC |
204 ms |
18036 KiB |
| testcase32.txt |
AC |
211 ms |
17376 KiB |
| testcase33.txt |
AC |
19 ms |
4244 KiB |
| testcase34.txt |
AC |
17 ms |
4272 KiB |
| testcase35.txt |
AC |
18 ms |
4288 KiB |
| testcase36.txt |
AC |
19 ms |
4224 KiB |
| testcase37.txt |
AC |
20 ms |
4192 KiB |
| testcase38.txt |
AC |
19 ms |
4292 KiB |
| testcase39.txt |
AC |
35 ms |
5040 KiB |
| testcase40.txt |
AC |
36 ms |
5124 KiB |
| testcase41.txt |
AC |
31 ms |
5104 KiB |
| testcase42.txt |
AC |
38 ms |
4972 KiB |
| testcase43.txt |
AC |
35 ms |
4836 KiB |
| testcase44.txt |
AC |
34 ms |
5100 KiB |
| testcase45.txt |
AC |
595 ms |
34788 KiB |
| testcase46.txt |
AC |
623 ms |
35916 KiB |
| testcase47.txt |
AC |
582 ms |
34152 KiB |
| testcase48.txt |
AC |
619 ms |
35916 KiB |
| testcase49.txt |
AC |
586 ms |
33896 KiB |
| testcase50.txt |
AC |
632 ms |
35904 KiB |
| testcase51.txt |
AC |
567 ms |
33292 KiB |
| testcase52.txt |
AC |
633 ms |
35976 KiB |