kdzhr

Плохая погода

Mar 12th, 2020
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. // OK http://contest.uni-smr.ac.ru/ru/problemset/6267/
  2.  
  3. # include <iostream>
  4. # include <vector>
  5. # include <set>
  6.  
  7. using namespace std;
  8.  
  9.  
  10. bool check(vector<uint32_t> &m, size_t &mid, size_t &n, uint64_t &d) {
  11.     multiset<uint64_t> q;
  12.     bool is_good = true;
  13.     for (size_t i = 0; i < mid; i++) {
  14.         q.insert(m[i]);
  15.     }
  16.     for (size_t i = mid; i < n; i++) {
  17.         size_t x = *q.begin();
  18.         q.erase(q.begin());
  19.         if (x + m[i] > d) {
  20.             is_good = false;
  21.             break;
  22.         } else {
  23.             q.insert(x + m[i]);
  24.         }
  25.     }
  26.     return !is_good or *--q.end() > d;
  27. }
  28.  
  29. int main() {
  30.     size_t n;
  31.     uint64_t d;
  32.     cin >> n >> d;
  33.     vector<uint32_t> m(n);
  34.     for (size_t i = 0; i < n; i++) {
  35.         cin >> m[i];
  36.     }
  37.     size_t left = 0;
  38.     size_t right = n;
  39.     while (right - left > 1) {
  40.         size_t mid = (left + right) / 2;
  41.         if (check(m, mid, n, d)) {
  42.             left = mid;
  43.         } else {
  44.             right = mid;
  45.         }
  46.     }
  47.     if (!check(m, right, n, d)) {
  48.         cout << right;
  49.     } else {
  50.         cout << -1;
  51.     }
  52.     return 0;
  53. }
Add Comment
Please, Sign In to add comment