BOJ : https://www.acmicpc.net/problem/2565
github : https://github.com/junho0956/Algorithm/blob/master/2565/2565/%EC%86%8C%EC%8A%A4.cpp
오름차순 정렬이 되어있어야하고, lis 알고리즘에서 lower_bound의 의미를 알아보자면
ex) 만약 현재 lis의 마지막 second가 5이고 현재 걸려있는 줄의 second가 4이면 꼬여있는 상태가 됨을 의미하고,
만약 현재 lis의 마지막 second가 5이고 현재 걸려있는 줄의 second가 6이면 꼬이지 않은 상태가 됨을 의미한다.
꼬일때 lower_bound -> lis의 길이를 찾는 문제이다
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
|
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector<pair<int, int> > v;
int lis[501];
int n, f, s, cnt, L;
int _lower_bound(int start, int end, int key) {
int mid;
while (start < end) {
mid = (start + end) / 2;
if (lis[mid] < key)
start = mid + 1;
else
end = mid;
}
return end + 1;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d%d", &f, &s);
v.push_back(make_pair(f, s));
}
sort(v.begin(), v.end());
lis[0] = v[0].second;
for (int i = 1; i < n; i++) {
if (lis[L] < v[i].second) {
lis[++L] = v[i].second;
}
else {
int ans = _lower_bound(0, L, v[i].second);
lis[ans - 1] = v[i].second;
cnt++;
}
}
printf("%d", cnt);
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
복습 20.02.10
'algorithm > BOJ' 카테고리의 다른 글
2568번 : 전깃줄2 - Junnnho (0) | 2019.04.08 |
---|---|
BOJ 2352번 반도체 설계 (0) | 2019.04.08 |
BOJ 14501번 퇴사 (0) | 2019.04.07 |
6603번 : 로또 - junnnho (0) | 2019.04.07 |
1182번 : 부분수열의 합 - junnnho (0) | 2019.04.07 |