cf1536 D. Omkar and Medians
题意:
给定数组 \(a[]\),问能否构造数组 \(b[]\),使得 \(a_i\) 是 \(b_1,b_2,\dots , b_{2i-1}\) 的中位数
思路:
结论:相邻的 \(a\) 在 \(b\) 中也要相邻。
怎么知道的?模拟一下过程即可。详见 very good 题解
bool sol() {
cin >> n; for(int i = 1; i <= n; i++) cin >> a[i];
set<int> S; S.insert(a[1]);
for(int i = 2; i <= n; i++) {
if(a[i] > a[i-1]) {
auto p = S.upper_bound(a[i-1]); //比a[i-1]大的第一个数
if(p != S.end() && *p < a[i]) return 0;
}
if(a[i] < a[i-1]) {
auto p = S.lower_bound(a[i-1]); //比a[i-1]小的第一个数
if(p != S.begin() && *prev(p) > a[i]) return 0;
}
S.insert(a[i]);
}
return 1;
}

浙公网安备 33010602011771号