mojo's Blog

[백준 12015] 가장 긴 증가하는 부분 수열 3 본문

백준/Binary Search

[백준 12015] 가장 긴 증가하는 부분 수열 3

_mojo_ 2021. 7. 2. 02:03

문제 링크 => 12738번: 가장 긴 증가하는 부분 수열 3 (acmicpc.net)

 

12738번: 가장 긴 증가하는 부분 수열 3

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000)

www.acmicpc.net


가장 긴 증가하는 부분 수열 2 문제에서 수열의 값이 커진것을 제외하고 동일한 문제이다.

 

[백준 12015] 가장 긴 증가하는 부분 수열 2 :: M - J - C (tistory.com)

 

[백준 12015] 가장 긴 증가하는 부분 수열 2

문제 링크 => 12015번: 가장 긴 증가하는 부분 수열 2 (acmicpc.net) 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai.

cmj092222.tistory.com

위 링크의 코드에서 배열과 벡터의 type을 int 형에서 long long 형으로 변환만 해주면 끝이다.

 

풀이 code

#define _CRT_SECURE_NO_WARNINGS
#include <string>
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <time.h>
#define INF 100000000
#define endl '\n'

using namespace std;

long long arr[1000000];

void solve(int n) {
	vector<long long> v;

	for (int i = 0; i < n; i++) {
		int index = lower_bound(v.begin(), v.end(), arr[i]) - v.begin();
		if (index == v.size()) v.push_back(arr[i]);
		else if (index < v.size()) v[index] = arr[i];
	}

	cout << v.size() << endl;
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}

	solve(n);
	
	return 0;
}

 

'백준 > Binary Search' 카테고리의 다른 글

[백준 2776] 암기왕  (0) 2022.01.15
[백준 2737] 연속 합  (0) 2021.09.14
[백준 12015] 가장 긴 증가하는 부분 수열 2  (0) 2021.07.02
[백준 19637] IF문 좀 대신 써줘  (0) 2021.07.01
[백준 2805] 나무 자르기  (0) 2021.07.01
Comments