https://www.acmicpc.net/problem/18353
18353번: 병사 배치하기
첫째 줄에 N이 주어진다. (1 ≤ N ≤ 2,000) 둘째 줄에 각 병사의 전투력이 공백을 기준으로 구분되어 차례대로 주어진다. 각 병사의 전투력은 10,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
LIS로 해결하면 되는 문제이다. 연속되게 작아지는 수열을 찾으면 되기 때문에 일반적인 LIS문제와 조금 다르지만 입력한 숫자에 마이너스를 붙여서 비교하면 내림차순도 찾을 수 있기 때문에 LIS로 해결하였다.
#include <iostream>
#include <vector>
#include <algorithm>
#define INF 987654321
using namespace std;
int main() {
int n, x;
vector<int> v;
v.push_back(INF);
cin >> n;
for(int i = 0 ; i < n; i++) {
cin >> x;
x = -x; //내림차순인 수열을 찾기 위하여 -를 붙임
if(v.back() < x) {
v.push_back(x);
}
else {
auto it = lower_bound(v.begin(), v.end(), x);
*it = x;
}
}
cout << n - v.size();
return 0;
}'백준' 카테고리의 다른 글
| 백준11501 - 주식 (0) | 2020.05.16 |
|---|---|
| 백준16162 - 가희와 3단 고음 (0) | 2020.05.13 |
| 백준1240 - 노드사이의 거리 (0) | 2020.05.11 |
| 백준11607 - Grid (0) | 2020.05.01 |
| 백준9753 - 짝 곱 (0) | 2020.04.21 |