-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path2402_leetcode
More file actions
48 lines (46 loc) · 1.61 KB
/
Copy path2402_leetcode
File metadata and controls
48 lines (46 loc) · 1.61 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class Solution {
#define ll long long
#define pli pair<ll,int>
public:
int mostBooked(int n, vector<vector<int>>& meetings) {
sort(meetings.begin(),meetings.end());
priority_queue<pli,vector<pli>,greater<pli>> free_rooms, occupied_rooms;
vector<int> freq(n,0);
//Initially all rooms are free
for(int i=0;i<n;++i)
free_rooms.push({0,i});//{time,room_no} pair
//Simulate Job Scheduling
for(int i=0;i<meetings.size();++i){
//Add rooms getting free now
while(!occupied_rooms.empty() and occupied_rooms.top().first<=meetings[i][0]){
pli curr = occupied_rooms.top();
occupied_rooms.pop();
curr.first = 0;
free_rooms.push(curr);
}
//Assign a room to current meeting
if(!free_rooms.empty()){
pli curr = free_rooms.top();
free_rooms.pop();
freq[curr.second]++;
curr.first = meetings[i][1];
occupied_rooms.push(curr);
}else{
pli curr = occupied_rooms.top();
occupied_rooms.pop();
freq[curr.second]++;
curr.first += 1LL*(meetings[i][1] - meetings[i][0]);
occupied_rooms.push(curr);
}
}
int max_meeting_room;
int max_meetings = 0;
for(int i=0;i<n;++i){
if(freq[i]>max_meetings){
max_meeting_room = i;
max_meetings = freq[i];
}
}
return max_meeting_room;
}
};