Advertisement
Naxocist

Noodle

May 3rd, 2022
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.02 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using ll = long long;
  5. using pi = pair<int, int>;
  6. using tiii = tuple<int, int, int>;
  7.  
  8. const int N = 1e5 + 3;
  9. int ar[N];
  10.  
  11. int main() {
  12.     // freopen("input.in", "r", stdin);
  13.     int n, m, k; scanf("%d%d%d", &n, &m, &k);
  14.  
  15.     ll l, r;
  16.     l = r = 0;
  17.     for(int i=1; i<=n; ++i) scanf("%d", &ar[i]), r+= ar[i];
  18.    
  19.     ll mx = 0;
  20.     while(l <= r){
  21.         ll md = (l+r)/2, s = 0;
  22.         int use = 0;
  23.  
  24.         priority_queue<ll, vector<ll>, greater<ll>> pq;
  25.         for(int i=1; i<=n; ++i){
  26.             pq.push(ar[i]);
  27.             s += ar[i];
  28.             while(pq.size() > k) s -= pq.top(), pq.pop(); // pq will keep holding k highest elements
  29.  
  30.             if(s >= md && pq.size() == k){
  31.                 use++;
  32.                 s = 0;
  33.                 pq = priority_queue<ll, vector<ll>, greater<ll>>();
  34.             }
  35.         }
  36.    
  37.         if(use >= m){
  38.             mx = md;
  39.             l = md + 1;
  40.         }else r = md - 1;
  41.     }
  42.  
  43.     printf("%lld", mx);
  44. }
  45.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement