Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define ll long long int
- using namespace std;
- ll maxPage(ll *P, const int &n)
- {
- ll maxi = -1;
- for(int i = 0; i < n; i++)
- {
- if(P[i] > maxi)
- {
- maxi = P[i];
- }
- }
- return maxi;
- }
- ll sumPages(ll *P, const int &n)
- {
- ll sum = 0;
- for(int i = 0; i <n; i++)
- sum += P[i];
- return sum;
- }
- int numParts(ll *P, const int &n, ll maxSize)
- {
- int k = 1;
- ll sum = 0;
- for(int i = 0; i < n; i++)
- {
- sum += P[i];
- if(sum > maxSize)
- {
- k++;
- sum = P[i];
- }
- }
- return k;
- }
- ll bin_part(ll *P, const int &n, const int &m)
- {
- int k;
- ll low = maxPage(P, n);
- ll high = sumPages(P, n);
- ll mid;
- while(low < high)
- {
- mid = low + (high - low)/2;
- k = numParts(P, n, mid);
- if(k <= m)
- {
- high = mid;
- }
- else
- {
- low = mid + 1;
- }
- }
- return low;
- }
- int main()
- {
- int n, m;
- cin>>n;
- ll P[n];
- for(int i = 0; i < n; i++)
- cin>>P[i];
- cin>>m;
- ll ans = bin_part(P, n, m);
- cout<<ans<<endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment