https://www.acmicpc.net/problem/2568
[난이도] Platinum5
[유형] DP
[풀이]
O(nlogn) LIS 문제입니다.
#include <cstdio>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
int N,mp[500001],pos[100001];
pair<int,int> a[100001];
set<int> ans;
int main(){
scanf("%d",&N);
for(int i=0;i<N;i++) {
scanf("%d%d",&a[i].first,&a[i].second);
ans.insert(a[i].first);
}
sort(a,a+N);
for(int i=0;i<N;i++) mp[a[i].second]=i;
vector<int> v;
for(int i=0;i<N;i++){
int idx = lower_bound(v.begin(),v.end(),a[i].second)-v.begin();
if(v.size()==idx) v.push_back(a[i].second);
else v[idx]=a[i].second;
pos[i]=idx;
}
int k=v.size()-1;
for(int i=N-1;i>=0;i--){
if(pos[i]==k){
ans.erase(a[i].first);
if(--k<0) break;
}
}
printf("%d\n",ans.size());
for(auto k : ans) printf("%d\n",k);
}
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Platinum5/2568.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold1] 1509 : 팰린드롬 분할 (C++) (0) | 2022.05.13 |
---|---|
[BOJ/백준][Gold5] 19942 : 다이어트 (C++) (1) | 2022.05.13 |
[BOJ/백준][Gold1] 1562 : 계단 수 (C++) (0) | 2022.03.27 |
[BOJ/백준][Gold5] 17265 : 나의 인생에는 수학과 함께 (C++) (0) | 2022.03.27 |
[BOJ/백준][Gold5] 9207 : 페그 솔리테어 (C++) (0) | 2022.03.27 |