File tree Expand file tree Collapse file tree 1 file changed +39
-5
lines changed Expand file tree Collapse file tree 1 file changed +39
-5
lines changed Original file line number Diff line number Diff line change 1
- // Authored by : BaaaaaaaaaaarkingDog
1
+ // Authored by : syoh0708
2
2
// Co-authored by : -
3
- // http://boj.kr/****************
3
+ // http://boj.kr/c805ab6be00244ba9b563dbec6619ca5
4
4
#include < bits/stdc++.h>
5
+
5
6
using namespace std ;
6
7
7
- int main (void ){
8
+ int n;
9
+ pair<int , int > a[500005 ];
10
+
11
+ int main () {
8
12
ios::sync_with_stdio (0 );
9
13
cin.tie (0 );
10
-
11
- }
14
+
15
+ cin >> n;
16
+
17
+ for (int i = 0 ; i < n; i++)
18
+ cin >> a[i].first >> a[i].second ;
19
+
20
+ sort (a, a + n, greater<pair<int , int >>());
21
+
22
+ multiset<int > s;
23
+
24
+ for (int i = 0 ; i < n; i++) {
25
+ auto it = s.lower_bound (-a[i].second + 1 );
26
+ if (it == s.end ()) s.insert (-1 );
27
+ else {
28
+ int val = *it;
29
+
30
+ s.erase (it);
31
+ s.insert (val - 1 );
32
+ }
33
+ }
34
+
35
+ cout << s.size ();
36
+ }
37
+ /* *
38
+ * 키의 내림차순으로 정렬한 뒤 수강생을 팀에 배정하면
39
+ * 수강생 S를 인원이 n명인 팀에 배정하면 S의 등수는 (n + 1)등이 된다.
40
+ * 따라서 수강생 S가 x등 안에 들고 싶다면,
41
+ * 팀원이 (x - 1)명 이하인 팀이 있다면 그 중 팀원이 가장 많은 팀에 배정하고
42
+ * 팀원이 (x - 1)명 이하인 팀이 없다면 새로운 팀을 배정한다.
43
+ * multiset이 기본적으로 오름차순으로 정렬되고, (x - 1)명 이하인 팀 중에서 팀원 수가 가장 많은 팀을 원하기 때문에
44
+ * 팀원 수에 -(마이너스)를 붙이고, lower_bound로 찾으면 된다.
45
+ */
You can’t perform that action at this time.
0 commit comments