Submission #1014482

#TimeUsernameProblemLanguageResultExecution timeMemory
1014482vjudge1Cake 3 (JOI19_cake3)C++17
0 / 100
1 ms604 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
vector<pair<int, int>> cake;
int ans;

int dostuf(int pen){
    ans = 0;
    map<int, pair<int, int>> mp;
    for (auto [i, j] : cake) {
        if (j >= pen) {
            mp[i].first += j - pen;
            mp[i].second--;
        }
    }
    if (mp.empty()) return 0;

    int prv = mp.begin()->first;
    pair<int, int> mmin = {0, 0}, now = {0, 0}, bst = {0, 0};

    for (auto& [i, j] : mp) {
        j.first -= 2 * i - 2 * prv;
        prv = i;
        now.first += j.first;
        now.second += j.second;
        mmin = min(mmin, now);
        bst = max(bst, {now.first - mmin.first, now.second - mmin.second});
    }

    ans = bst.first;
    return -bst.second;
}

signed main() {
    int n, m;
    cin >> n >> m;
    cake.resize(n);
    for (auto& [i, j] : cake)
        cin >> j >> i;

    int l = -1e9, r = 1e9, res = 0;
    while (l <= r) {
        int mid = (l + r) / 2;
        if (dostuf(mid) >= m) {
            l = mid + 1;
            res = mid;
        } else {
            r = mid - 1;
        }
    }
    dostuf(res);
    cout << ans + res * m;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...