UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#213912#2380. 中位数WZRYWZWY01333ms5816kbC++112.2kb2024-11-14 18:39:552024-11-14 23:00:20

answer

#include <vector> // https://atcoder.jp/contests/abc107/submissions/12955333
#include <stack>
#include <queue>
#include <list>
#include <bitset>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <algorithm>
#include <numeric>
#include <iostream>
#include <iomanip>
#include <string>
#include <chrono>
#include <random>
#include <cmath>
#include <cassert>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <functional>
#include <sstream>

using namespace std;


class FenwickTree {
    public:
        FenwickTree(int n) : N(n), data(N, 0) {

        }

        void reset() {
            fill(data.begin(), data.end(), 0);
        }

        void put(int x, int v) {
            for (; x < N; x |= x + 1) {
                data[x] += v;
            }
        }

        int get(int x) {
            int res = 0;
            for (; x >= 0; x = (x & (x + 1)) - 1) {
                res += data[x];
            }
            return res;
        }

    private:
        int N;
        vector<int> data;
};

int main(int argc, char** argv) {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin >> n;
    vector<int> A(n);
    for (int i = 0; i < n; ++i) {
        cin >> A[i];
    }


    vector<int> B(n, 0);

    int base = -n;

    FenwickTree ft(n * 2 + 123);


    long long tar = n * 1LL * (n + 1) / 2 / 2 + 1;
    // cout << tar << endl;
    auto ok = [&](int x) {
        for (int i = 0; i < n; ++i) {
            if (A[i] <= x) {
                B[i] = 1;
            } else {
                B[i] = -1;
            }
        }
        ft.reset();
        int sum = 0;
        ft.put(sum - base, 1);

        long long res = 0;
        for (auto x : B) {
            sum += x;
            res += ft.get(sum - base - 1);
            ft.put(sum - base, 1);
        }
        return res >= tar;
    };

    int mx = *max_element(A.begin(), A.end());
    long long lo = 0, hi = mx;

    while (lo < hi) {
        auto mi = (lo + hi) >> 1;
        if (ok(mi)) {
            hi = mi;
        } else {
            lo = mi + 1;
        }
    }

    cout << lo << '\n';

    return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 1248kb

input:

200
247837946 222748444 549404903 934970141 181690491 116150147 755881953 912914845 578004877 589768...

output:

415196584

result:

wrong answer 1st numbers differ - expected: '411892743', found: '415196584'

Test #2:

score: 0
Wrong Answer
time: 0ms
memory: 1244kb

input:

200
504553675 321343511 781936447 172776833 779139954 643752948 106 164 303976944 828799931 11502170...

output:

467261488

result:

wrong answer 1st numbers differ - expected: '451369372', found: '467261488'

Test #3:

score: 0
Wrong Answer
time: 0ms
memory: 1244kb

input:

200
738368650 91602659 340556191 835209882 409442204 656938221 258295858 90658347 126689369 56196859...

output:

423293713

result:

wrong answer 1st numbers differ - expected: '420852999', found: '423293713'

Test #4:

score: 0
Wrong Answer
time: 4ms
memory: 1332kb

input:

5000
300051244 685920750 122806687 315801142 33592358 339985437 262520930 380010194 687330910 550362...

output:

465584409

result:

wrong answer 1st numbers differ - expected: '465193387', found: '465584409'

Test #5:

score: 0
Wrong Answer
time: 4ms
memory: 1332kb

input:

5000
108135249 950186870 146626753 682580494 744412491 4159 995071655 157947560 668940645 878891308 ...

output:

467006251

result:

wrong answer 1st numbers differ - expected: '466892796', found: '467006251'

Test #6:

score: 0
Wrong Answer
time: 4ms
memory: 1332kb

input:

5000
246610103 780664789 678774940 716124165 518453378 300121008 135383319 939869983 430946660 13412...

output:

470684231

result:

wrong answer 1st numbers differ - expected: '470507384', found: '470684231'

Test #7:

score: 0
Wrong Answer
time: 297ms
memory: 5816kb

input:

300000
786856547 380253059 684225515 795392038 881780483 18437791 793783577 832330260 801624996 3466...

output:

463539297

result:

wrong answer 1st numbers differ - expected: '463539280', found: '463539297'

Test #8:

score: 0
Wrong Answer
time: 292ms
memory: 5812kb

input:

300000
951000485 930070933 3566360 157114366 150196488 611226665 123590886 950624066 472150346 57976...

output:

462350212

result:

wrong answer 1st numbers differ - expected: '462334620', found: '462350212'

Test #9:

score: 0
Wrong Answer
time: 316ms
memory: 5816kb

input:

300000
728509094 406128756 696166390 756254976 31403187 672131182 35544213 870708756 3659210 5227553...

output:

464176898

result:

wrong answer 1st numbers differ - expected: '464162969', found: '464176898'

Test #10:

score: 0
Wrong Answer
time: 416ms
memory: 5816kb

input:

300000
804874490 52247250 546638789 400214210 383796618 47995083 814777769 507157584 466189162 28296...

output:

463577892

result:

wrong answer 1st numbers differ - expected: '463577194', found: '463577892'