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;
}
posted @ 2022-06-17 19:25  Bellala  阅读(30)  评论(0)    收藏  举报