Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- bool swap3(int a1 , int a2 , int a3 , int b1 , int b2 , int b3)
- {
- if(a3 > b3)
- {
- return true;
- }
- if(a3 < b3)
- {
- return false;
- }
- else
- {
- if(a2 > b2)
- {
- return true;
- }
- if(a2 < b2)
- {
- return false;
- }
- else
- {
- if(a1 >= b1)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
- }
- void SiftDown(int* a , int* b, int* c , int n , int i)
- {
- int left = 2 * i + 1;
- int right = 2 * i + 2;
- int q = i;
- if ((left <= n - 1 ) && (swap3(a[q] , b[q] , c[q] , a[left] , b[left] , c [left]) == false))
- {
- q = left;
- }
- if ((right <= n - 1) && (swap3(a[q] , b[q] , c[q] , a[right] , b[right] , c [right])== false))
- {
- q = right;
- }
- if (q != i)
- {
- std::swap(a[i] , a[q]);
- std::swap(b[i] , b[q]);
- std::swap(c[i] , c[q]);
- SiftDown(a , b , c, n , q);
- }
- }
- void SiftUp(int* arr , int i)
- {
- int father = (i - 1) / 2;
- if((i != 0) && (arr[i] > arr[father]))
- {
- std::swap(arr[i], arr[father]);
- i = father;
- SiftUp(arr, i);
- }
- }
- int main()
- {
- int n;
- std::cin >> n;
- int Day1[n];
- int Month1[n];
- int Year1[n];
- int Day2[n];
- int Month2[n];
- int Year2[n];
- for(int i = 0; i < n; ++ i)
- {
- std::cin >> Day1[i] >> Month1[i] >> Year1[i] >> Day2[i] >> Month2[i] >> Year2[i];
- Year1[i] = Year1[i] + 18;
- if( swap3(Day1[i] , Month1[i] , Year1[i], Day2[i] , Month2[i] , Year2[i]) == true)
- {
- Year1[i] = -1;
- Year2[i] = -1;
- }
- if(swap3(Day2[i] , Month2[i] , Year2[i] , Day1[i] , Month1[i] , Year1[i] + 62) == true )
- {
- Day2[i] = Day1[i];
- Month2[i] = Month1[i];
- Year2[i] = Year1[i] + 62;
- }
- }
- for(int i = (n - 2) / 2; i >= 0; --i)
- {
- SiftDown(Day1 , Month1 , Year1, n , i);
- SiftDown(Day2 , Month2 , Year2, n , i);
- }
- int length = n;
- while(length > 0)
- {
- std::swap(Day1[0] , Day1[length-1]);
- std::swap(Month1[0] , Month1[length-1]);
- std::swap(Year1[0] , Year1[length-1]);
- std::swap(Day2[0] , Day2[length-1]);
- std::swap(Month2[0] , Month2[length-1]);
- std::swap(Year2[0] , Year2[length-1]);
- SiftDown(Day2 , Month2 , Year2 , length - 1 , 0);
- SiftDown(Day1 , Month1 , Year1 , length - 1 , 0);
- --length;
- }
- int i = 0;
- while(Year1[i] == -1)
- {
- ++i;
- }
- int j = 0;
- while(Year2[j] == -1)
- {
- ++j;
- }
- int k = 0;
- int maxk = 0;
- while(i < n && j < n)
- {
- if(swap3(Day1[i] , Month1[i] , Year1[i] , Day2[j] , Month2[j] , Year2[j]) == false)
- {
- ++i;
- ++k;
- maxk = std::max( k , maxk);
- }
- else
- {
- ++j;
- --k;
- }
- // cout << k << '\n';
- }
- std::cout << maxk;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement