Advertisement
Guest User

NikolaevMisha/2.2

a guest
Oct 18th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.26 KB | None | 0 0
  1. #include <iostream>
  2.  
  3.  
  4.  
  5.  
  6. bool swap3(int a1 , int a2 , int a3 , int b1 , int b2 , int b3)
  7.  
  8. {
  9.  
  10.     if(a3 > b3)
  11.     {
  12.         return true;
  13.     }
  14.     if(a3 < b3)
  15.     {
  16.         return false;
  17.     }
  18.     else
  19.     {
  20.         if(a2 > b2)
  21.         {
  22.             return true;
  23.         }
  24.         if(a2 < b2)
  25.         {
  26.             return false;
  27.         }
  28.         else
  29.         {
  30.             if(a1 >= b1)
  31.             {
  32.                 return true;
  33.             }
  34.             else
  35.             {
  36.  
  37.                 return false;
  38.             }
  39.  
  40.         }
  41.     }
  42.  
  43. }
  44.  
  45.  
  46. void SiftDown(int* a , int* b, int* c , int n ,  int i)
  47. {
  48.     int left = 2 * i + 1;
  49.     int right = 2 * i + 2;
  50.     int q = i;
  51.     if ((left <= n - 1  ) && (swap3(a[q] , b[q] , c[q] , a[left] , b[left] , c [left]) == false))
  52.     {
  53.         q = left;
  54.     }
  55.     if ((right <= n - 1) && (swap3(a[q] , b[q] , c[q] , a[right] , b[right] , c [right])== false))
  56.     {
  57.         q = right;
  58.     }
  59.     if (q != i)
  60.     {
  61.         std::swap(a[i] , a[q]);
  62.         std::swap(b[i] , b[q]);
  63.         std::swap(c[i] , c[q]);
  64.         SiftDown(a , b , c, n , q);
  65.     }
  66. }
  67.  
  68. void SiftUp(int* arr , int i)
  69. {
  70.     int father = (i - 1) / 2;
  71.     if((i != 0) && (arr[i] > arr[father]))
  72.     {
  73.         std::swap(arr[i], arr[father]);
  74.         i = father;
  75.         SiftUp(arr, i);
  76.     }
  77.  
  78. }
  79.  
  80.  
  81.  
  82.  
  83.  
  84. int main()
  85. {
  86.     int n;
  87.     std::cin >> n;
  88.     int Day1[n];
  89.     int Month1[n];
  90.     int Year1[n];
  91.  
  92.     int Day2[n];
  93.     int Month2[n];
  94.     int Year2[n];
  95.     for(int i = 0; i < n; ++ i)
  96.     {
  97.         std::cin >> Day1[i] >> Month1[i] >> Year1[i] >> Day2[i] >> Month2[i] >> Year2[i];
  98.         Year1[i] = Year1[i] + 18;
  99.  
  100.         if( swap3(Day1[i] , Month1[i] , Year1[i], Day2[i] , Month2[i] , Year2[i]) == true)
  101.         {
  102.             Year1[i] = -1;
  103.             Year2[i] = -1;
  104.         }
  105.  
  106.  
  107.  
  108.         if(swap3(Day2[i] , Month2[i] , Year2[i] , Day1[i] , Month1[i] , Year1[i] + 62) == true )
  109.         {
  110.             Day2[i] = Day1[i];
  111.             Month2[i] = Month1[i];
  112.             Year2[i] = Year1[i] + 62;
  113.         }
  114.  
  115.  
  116.     }
  117.     for(int i = (n - 2) / 2; i >= 0; --i)
  118.     {
  119.         SiftDown(Day1 , Month1 , Year1, n , i);
  120.         SiftDown(Day2 , Month2 , Year2, n , i);
  121.     }
  122.     int length = n;
  123.  
  124.  
  125.     while(length > 0)
  126.     {
  127.  
  128.         std::swap(Day1[0] , Day1[length-1]);
  129.         std::swap(Month1[0] , Month1[length-1]);
  130.         std::swap(Year1[0] , Year1[length-1]);
  131.  
  132.  
  133.         std::swap(Day2[0] , Day2[length-1]);
  134.         std::swap(Month2[0] , Month2[length-1]);
  135.         std::swap(Year2[0] , Year2[length-1]);
  136.         SiftDown(Day2 , Month2 , Year2 , length - 1 , 0);
  137.  
  138.         SiftDown(Day1 , Month1 , Year1 , length - 1 , 0);
  139.         --length;
  140.     }
  141.  
  142.     int i = 0;
  143.     while(Year1[i] == -1)
  144.     {
  145.         ++i;
  146.     }
  147.     int j = 0;
  148.     while(Year2[j] == -1)
  149.     {
  150.         ++j;
  151.     }
  152.     int k = 0;
  153.     int maxk = 0;
  154.     while(i < n && j < n)
  155.     {
  156.         if(swap3(Day1[i] , Month1[i] , Year1[i] , Day2[j] , Month2[j] , Year2[j]) == false)
  157.         {
  158.             ++i;
  159.             ++k;
  160.             maxk = std::max( k , maxk);
  161.         }
  162.         else
  163.         {
  164.             ++j;
  165.             --k;
  166.  
  167.         }
  168.        // cout << k << '\n';
  169.     }
  170.  
  171.     std::cout << maxk;
  172.  
  173.     return 0;
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement