/* -*- coding: utf-8 -*- * * 580.cc: No.580 旅館の予約計画 - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 100; const int MAX_M = 1000; /* typedef */ typedef pair pii; typedef multiset mspi; /* global variables */ pii rs[MAX_M]; mspi rset; /* subroutines */ inline int dhm2mnt(int d, int h, int m) { return (d * 24 + h) * 60 + m; } bool ltmnt(const pii &a, const pii &b) { return a.second < b.second || (a.second == b.second && a.first < b.first); } /* main */ int main() { int n, m; scanf("%d%d", &n, &m); for (int i = 0; i < m; i++) { int d0, h0, m0, d1, h1, m1; scanf("%d %d:%d %d %d:%d", &d0, &h0, &m0, &d1, &h1, &m1); rs[i].first = dhm2mnt(d1, h1, m1); rs[i].second = dhm2mnt(d0, h0, m0); } sort(rs, rs + m, ltmnt); int cnt = 0; for (int i = 0; i < m; i++) { pii &ri = rs[i]; rset.insert(ri); while (! rset.empty() && rset.begin()->first < ri.second) { cnt++; rset.erase(rset.begin()); } if (rset.size() > n) { mspi::iterator sit = rset.end(); sit--; rset.erase(sit); } } cnt += rset.size(); printf("%d\n", cnt); return 0; }