Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- using namespace std;
- class IQueue
- {
- int *arr, length, first, last;
- public:
- IQueue(int len);
- void push(int val);
- int pop();
- };
- IQueue::IQueue(int len)
- {
- arr = new int [len];
- length = len;
- first = 0;
- last = -1;
- }
- void IQueue::push(int val)
- {
- if (last < length-1)
- arr[++last] = val;
- }
- int IQueue::pop()
- {
- if (first == last+1)
- return -1;
- return arr[first++];
- }
- void sift_all (int *arr, int first, int last)
- {
- int j = first;
- int k = first*2+1;
- while (k <= last)
- {
- if (k < last && arr[k+1] < arr[k])
- k++;
- if (arr[j] < arr[k])
- break;
- else if (arr[j] >= arr[k])
- {
- swap(arr[j], arr[k]);
- j = k;
- k = k*2+1;
- }
- }
- }
- int main()
- {
- int n, k, time_i;
- cin >> n >> k;
- IQueue train_ticket(n);
- for (int i = 0; i < n; i++)
- {
- cin >> time_i;
- train_ticket.push(time_i);
- }
- int *kassa = new int[k];
- for (int i = 0; i < k; i++)
- kassa[i] = 0;
- for (int i = 0; i < n; i++)
- {
- time_i = train_ticket.pop();
- sift_all(kassa, 0, k-1);
- kassa[0] += time_i;
- }
- int max = 0;
- for (int i = 1; i < k; i++)
- if (kassa[i] > kassa[max])
- max = i;
- cout << kassa[max];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement