#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int number[1000001];
vector<int> arr;
int lowerbound(int src, int dest, int found)
{
int middle;
while (src - dest > 0)
{
middle = (src + dest) / 2;
if (number[middle] < found)
src = middle + 1;
else
dest = middle;
}
return dest + 1;
}
int main(void)
{
arr.push_back(-1);
int ans=0;
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> number[i];
}
for (int i = 0; i < n; i++)
{
if (arr.back() < number[i])
{
arr.push_back(number[i]);
ans++;
}
else
{
//auto daiti = lower_bound(arr.begin(),
// arr.end(), number[i]);
int daiti = lowerbound(0, arr.size(), number[i]);
daiti = number[i];
}
}
cout << ans;
return 0;
}
실제 정답이 되는 부분은 주석처리한 부분.
lower_bound를 실제로 구현한 부분은 맨 위.
만일 auto로 접근할 경우,
auto형으로 감싼 daiti를 통해 값을 바꾼다.
daiti는 std::vector<int>::iterator daiti의 반복자 형태로 반환된다.
따라서 바로 *daiti를 통해 값의 변환이 가능하다.
이때ㅡ *daiti는, daiti가 가리키는 원소(또는 객체)를 반환한다.
만일 이를 쓰지 않고 그냥 int로 할 경우,
vector[daiti]=number[i]로 값의 변환이 가능하다.
'성우리뷰' 카테고리의 다른 글
과제 (5) | 2020.08.29 |
---|---|
앱 (2) | 2020.08.21 |
삼각형 내려가 (2) | 2020.08.12 |
ls) 종만센세와 함께한 다이내믹 프로그래밍 (2) | 2020.08.11 |
나무막대) 아츠기 나나미의 "踊ってみた, HEROINE 育成計画" (4) | 2020.08.08 |