Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using ll = long long;
- using ull = unsigned long long;
- const ll MAXN = 1e9 + 1;
- map<ll, ll> h;
- ll ans = 0;
- bool check_cur_ans(ll T, ll H, ll x) {
- ll t = 0;
- ll current_h = 0;
- while (current_h < H) {
- current_h += x;
- t++;
- if (t > T) {
- return false;
- }
- auto it = h.end()--;
- for (it; it != h.begin(); it--) {
- if (current_h < it->first) {
- continue;
- }
- current_h -= min(it->second, current_h - it->first + 1);
- }
- it = h.begin();
- if (current_h < it->first) {
- continue;
- }
- else {
- current_h -= min(it->second, current_h - it->first + 1);
- }
- }
- return true;
- }
- void bin_search (ll left, ll right, ll T, ll H, ll mid = 0) {
- while (right - left > 0) {
- mid = (left + right) >> 1;
- if ((check_cur_ans(T, H, mid))) {
- right = mid;
- }
- else {
- left = mid + 1;
- }
- }
- ans = right;
- }
- void solve() {
- ios::sync_with_stdio(false);
- cin.tie(NULL);
- ll n, H, T;
- cin >> n >> H >> T;
- for (int i = 1; i <= n; i++) {
- ll a, b;
- cin >> a >> b;
- h[a] = b;
- }
- ll left = 1;
- ll right = MAXN;
- bin_search(left, right, T, H);
- cout << ans;
- }
- int main() {
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement