标签:参考 输出 push erase std 遍历 任务切换 stream logs
给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN, EN ), 计算最少需要多少台机器才能按时完成所有任务。
同一时间一台机器上最多进行一项任务,并且一项任务必须从头到尾保持在一台机器上进行。任务切换不需要时间。
第一行一个整数 N,(1 ≤ N ≤ 100000),表示任务的数目。 以下 N 行每行两个整数 Si, Ei,(0 ≤ Si < Ei ≤ 1000000000),表示任务的起至时间。
输出一个整数,表示最少的机器数目。
5 1 10 2 7 6 9 3 4 7 10
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 #include<set> 7 using namespace std; 8 9 10 int main() 11 { 12 int n, start, end, res = 0; 13 vector<pair<int, int>> time; 14 multiset<int> st; 15 cin >> n; 16 for (int i = 0;i < n;i++) { 17 cin >> start >> end; 18 time.push_back(make_pair(start, end)); 19 } 20 21 sort(time.begin(), time.end()); 22 for (int i = 0;i < n;i++) { 23 set<int>::iterator it = st.begin(); 24 while (it != st.end()) { 25 if (time[i].first >= *it) it = st.erase(it); 26 else break; 27 } 28 st.insert(time[i].second); 29 res = max(res, (int)st.size()); 30 } 31 cout << res << endl; 32 return 0; 33 }
标签:参考 输出 push erase std 遍历 任务切换 stream logs
原文地址:http://www.cnblogs.com/weedboy/p/7071894.html