This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |