Official

D - 会議室の予約 / Meeting Room Reservation Editorial by kyopro_friends Editorial for printing


答えは同時開催される会議の数の最大値となります。

なぜなら、その個数の会議室が用意されているとき、時系列順に会議の開催をシミュレーションすることを考えると、どの会議も会議開始時に必ず空いている会議室が存在し、その会議室を使えば良いためです。

同時に開催される会議の数は、時刻順に「会議の開始」「会議の終了」をシミュレーションすることで求めることができます。計算量は \(O(N\log N)\) です。

実装例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
  int n;
  cin >> n;
  vector<pair<int,int>>events;
  for(int i=0; i<n; i++){
    int s, e;
    cin >> s >> e;
    events.push_back({s, 1});
    events.push_back({e, -1});
  }
  sort(events.begin(), events.end());

  int ans = 0;
  int crr = 0;
  for(auto[_, d]: events){
    crr += d;
    ans = max(ans, crr);
  }
  cout << ans << endl;
}

実装例 (Python)

N = int(input())
events = []
for _ in range(N):
  s, e = map(int,input().split())
  events.append((s, 1))
  events.append((e, -1))

events.sort()
ans = 0
crr = 0
for _, d in events:
  crr += d
  ans = max(ans, crr)

print(ans)

posted:
last update: