Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- class my_pair {
- public:
- long long nom;
- int right_border;
- my_pair() {}
- my_pair(long long a, long long det) {
- nom = a;
- right_border = det;
- }
- };
- class my_heap {
- public:
- long long one_layer(vector <my_pair> &dot, long long size);
- private:
- void sort_heap(vector<my_pair> &dot, long long diff);
- void sift_down(vector<my_pair> &dot, long long number, long long size);
- };
- long long my_heap::one_layer(vector <my_pair> &dot, long long size) {
- sort_heap(dot, size);
- long long res = 0;
- long long temp = 1;
- my_pair prev = dot[0];
- for (long long i = 1; i < size; i++) {
- if (temp == 1) {
- res += dot[i].nom - prev.nom;
- }
- if (dot[i].right_border = 1) {
- temp--;
- }
- if (dot[i].right_border = 0) {
- temp++;
- }
- prev = dot[i];
- }
- return res;
- }
- void my_heap::sift_down(vector<my_pair> &dot, long long number, long long size) {
- long long left = 2 * number + 1;
- long long right = 2 * number + 2;
- long long max = number;
- if (right < size && dot[right].nom > dot[max].nom) {
- max = right;
- }
- if (left < size && dot[left].nom > dot[max].nom) {
- max = left;
- }
- if (max != number) {
- swap(dot[max], dot[number]);
- sift_down(dot, max, size);
- }
- }
- void my_heap::sort_heap(vector<my_pair> &dot, long long diff) {
- for (long long i = diff / 2 - 1; i >= 0; i--) {
- sift_down(dot, i, diff);
- }
- for (long long i = diff - 1; i >= 0; i--) {
- swap(dot[0], dot[i]);
- sift_down(dot, 0, i);
- }
- }
- int main() {
- long long n = 0;
- cin >> n;
- my_heap solvation;
- vector <my_pair> array(2 * n);
- for (long long i = 0; i < 2 * n; i++) {
- int right_border = i % 2;
- int nom = 0;
- cin >> nom;
- array[i] = my_pair(nom, right_border);
- }
- cout << solvation.one_layer(array, 2 * n);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement