Nothing is compiled: MEMORY exceeds.
这是源码:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr int maxn = 500005;
deque<ll> q;
vector<ll> x(maxn);
vector<ll> s(maxn);
vector<ll> dp(maxn);
bool solve(int n, ll d, ll g, ll k) {
queue<ll> p;
q.clear(); q.push_back(0);
ll mind = max(d - g, 1ll), maxd = d + g;
for (int i = 1; i <= n; ++i) {
ll l = x[i] - maxd, r = x[i] - mind;
while (!p.empty() && x[p.front()] >= l && x[p.front()] <= r) {
while (!q.empty() && dp[q.back()] < dp[p.front()]) q.pop_back();
q.push_back(p.front());
p.pop();
}
while (!q.empty() && x[q.front()] < l) q.pop_front();
while (!q.empty() && x[q.back()] > r) q.pop_back();
if (q.empty()) return false;
dp[i] = dp[q.front()] + s[i];
if (dp[i] >= k) return true;
p.push(i);
}
return false;
}
int main() {
cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
ll n, d, k, sum = 0;
cin >> n >> d >> k;
for (int i = 1; i <= n; ++i) {
cin >> x[i];
cin >> s[i];
sum += max(0ll, s[i]);
}
if (sum < k) {
cout << "-1";
return 0;
}
ll l = 0, r = x[n];
while (l < r) {
ll mid = (l + r) >> 1;
if (solve(n, d, mid, k)) r = mid;
else l = mid + 1;
}
cout << l;
return 0;
}
```