# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1149997 | onbert | Cake 3 (JOI19_cake3) | C++20 | 4096 ms | 76752 KiB |
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 2e5 + 5, maxN = 8e5 + 5, INF = 1e18;
int n, m;
pair<int,int> a[maxn];
vector<int> L[maxN], R[maxN];
int ans = -INF;
void dnc(int id, int l, int r) {
int sz = min(r - l + 1, m);
if (l == r) {
L[id] = {-a[l].first * 2, a[l].second - a[l].first * 2};
R[id] = {a[l].first * 2, a[l].second + a[l].first * 2};
// cout << l << " " << r << endl;
// cout << L[id][0] << " " << L[id][1] << endl;
// cout << R[id][0] << " " << R[id][1] << endl;
return;
}
int mid = (l+r)/2;
dnc(id*2, l, mid); dnc(id*2+1, mid+1, r);
int lsz = L[id*2].size() - 1, rsz = L[id*2+1].size() - 1;
for (int i=0;i<=m;i++) {
if (i <= lsz && m-i <= rsz) ans = max(R[id*2][i] + L[id*2+1][m-i], ans);
// if (i <= lsz && m-i <= rsz) cout << "wtf " << l << " " << r << " " << i << " " << R[id*2][i] << " " << L[id*2+1][m-i] << " " << R[id*2][i] + L[id*2+1][m-i] << endl;
// if (i <= lsz && m-i <= rsz) if (R[id*2][i] + L[id*2+1][m-i] == 568584951) {
// cout << id << " " << l << " " << r << " " << endl;
// cout << i << " " << R[id*2][i] << " " << L[id*2+1][m-i] << endl;
// }
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |