/* ID: philipp17 PROG: milk2 LANG: C++ */ /* LANG can be C++11 or C++14 for those more recent releases */ #include #include #include #include #include #include using namespace std; bool sorter(const pair& i, const pair& j){ if(i.first != j.first){ return (i.first < j.first); } return (i.second > j.second); } int main() { ofstream fout ("milk2.out"); ifstream fin ("milk2.in"); int n; fin >> n; vector> events(2 * n); for(int i = 0; i < n; ++i){ int start, end; fin >> start >> end; events[2 * i] = {start, true}; events[2 * i+1] = {end, false}; } sort(events.begin(), events.end(), sorter); int longestMilking = 0, longestIdle = 0, milkers = 0, startMilking = -1, endMilking = -1; for(auto e : events){ if(e.second){ // So it is time to milk if(milkers == 0 && endMilking != -1){ longestIdle = max(longestIdle, e.first - endMilking); } if(milkers == 0){ startMilking = e.first; } milkers++; } else{ // So milking is stopped somewhere milkers--; if(milkers == 0 && startMilking != -1){ longestMilking = max(longestMilking, e.first - startMilking); } if(milkers == 0){ endMilking = e.first; } } // cout << e.second << " " << e.first << " " << milkers << " " << startMilking << " " << endMilking << " " << longestMilking << " " << longestIdle << endl; } fout << longestMilking << " " << longestIdle << endl; // for(auto e : events){ // cout << e.first << " " << e.second << endl; // } return 0; }