-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy path1834.cpp
More file actions
33 lines (31 loc) · 1.05 KB
/
Copy path1834.cpp
File metadata and controls
33 lines (31 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution {
struct item {
int index, et, pt;
item(int i, int e, int p) : index(i), et(e), pt(p) {}
friend bool operator<(const item &i1, const item &i2) {
return (i1.pt > i2.pt) || (i1.pt == i2.pt && i1.index > i2.index);
}
};
public:
vector<int> getOrder(vector<vector<int>> &tasks) {
vector<item> ss;
for (int i = 0; i < tasks.size(); i++)
ss.push_back({i, tasks[i][0], tasks[i][1]});
sort(ss.begin(), ss.end(), [](const item &i1, const item &i2) { return (i1.et < i2.et); });
vector<int> res;
priority_queue<item> pq;
int t = 0;
for (int i = 0; i < ss.size();) {
if (pq.empty() && t < ss[i].et) t = ss[i].et;
while (i < ss.size() && ss[i].et <= t)
pq.push(ss[i++]);
item it = pq.top();
pq.pop();
res.push_back(it.index);
t += it.pt;
}
while (!pq.empty())
res.push_back(pq.top().index), pq.pop();
return res;
}
};