Official

J - オフィス / Office Editorial by kyopro_friends


余事象を考えます。

\(i\) が会わなかった社員について考えます。そのような社員は次のうちどちらかです。

  • \(i\) が出社する前に退社した
  • \(i\) が退社した後に出社した

よって、それぞれの人の出社・退社時に、既に退社した人数・まだ出社していない人数がわかればよいです。人の出社退社を時刻順にシミュレーションすることでこれらを求めることができます。

writer解(Python)

N=int(input())

start=[[] for _ in range(2*10**5+10)]
end=[[] for _ in range(2*10**5+10)]
for i in range(N):
  S,T=map(int,input().split())
  start[S].append(i)
  end[T].append(i)

already=0
yet=N
ans=[N-1]*N

for t,(si,ti) in enumerate(zip(start,end)):
  for i in si:
    ans[i]-=already
    yet-=1
  for i in ti:
    ans[i]-=yet
    already+=1

print(*ans)

posted:
last update: