#include <iostream> #include <vector> #include <utility> using namespace std; class Conference { private: vector<pair<int,int>> Conferences; int N; public: Conference(int n); int GetMostTime(); void QuickSort(int order, int left, int right); }; Conference::Conference(int n) { N = n; for (int i = 0; i < N; i++) { pair<int,int> Temp = make_pair(0, 0); cin >> Temp.first; cin >> Temp.second; Conferences.push_back(Temp); } QuickSort(0, 0, Conferences.size() - 1); for (int i = 0; i < Conferences.size(); i++) { for (int j = i + 1; j < Conferences.size(); j++) { if (Conferences[i].first == Conferences[j].first) continue; else { if (i == j + 1) break; else { QuickSort(1, i, j); break; } } } } for (int i = 0; i < N; i++) cout << Conferences[i].first << " " << Conferences[i].second << endl; } int Conference::GetMostTime() { int MostTime = 0; for (int i = 0; i < Conferences.size(); i++) { int Second = Conferences[i].second; int Time = 1; for (int j = i + 1; j < Conferences.size(); j++) { if (Conferences[i].first == Conferences[j].first) continue; else if (Second <= Conferences[j].first) { Second = Conferences[j].second; Time++; } } if (Time > MostTime) MostTime = Time; } return MostTime; } void Conference::QuickSort(int order, int left, int right) { int i, j, key; pair<int, int> Temp = make_pair(0,0); if (left < right) { i = left + 1; j = right; if(order == 0) key = Conferences[left].first; else key = Conferences[left].second; while (i < j) { if (order == 0) { while (Conferences[i].first < key) { i++; if (i == Conferences.size()) break; } } else { while (Conferences[i].second < key) { i++; if (i == Conferences.size()) break; } } if (order == 0) { while (Conferences[j].first > key) { j--; if (j == 0) break; } } else { while (Conferences[j].second > key) { j--; if (j == 0) break; } } if (order == 0) { if (i < j) { Temp = Conferences[i]; Conferences[i] = Conferences[j]; Conferences[j] = Temp; } } else { if (i < j) { int temp = Conferences[i].second; Conferences[i].second = Conferences[j].second; Conferences[j].second = temp; } } } if (order == 0) { Temp = Conferences[left]; Conferences[left] = Conferences[j]; Conferences[j] = Temp; } else { int temp = Conferences[left].second; Conferences[left].second = Conferences[j].second; Conferences[j].second = temp; } QuickSort(order,left, j - 1); QuickSort(order,j + 1, right); } } int main() { int N; cin >> N; Conference C(N); cout << C.GetMostTime(); }
댓글
댓글 쓰기