본문 바로가기

성우리뷰

범위가 커졌을 때의 최대 긴 증가수열

#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