题目描述
小明是蓝桥王国的勇士,他晋升为蓝桥骑士,于是他决定不断突破自我。
这天蓝桥首席骑士长给他安排了 NN 个对手,他们的战力值分别为 a1,a2,...,ana1,a2,...,an,且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战,也可以选择避战。
作为热血豪放的勇士,小明从不走回头路,且只愿意挑战战力值越来越高的对手。
请你算算小明最多会挑战多少名对手。
输入描述
输入第一行包含一个整数 NN,表示对手的个数。
第二行包含 NN 个整数 a1,a2,...,ana1,a2,...,an,分别表示对手的战力值。
1≤N≤1031≤N≤103,1≤ai≤1091≤ai≤109。
输出描述
输出一行整数表示答案。
输入输出样例
示例
输入
6
1 4 3 2 5 6
输出
4
// Problem: 4. 蓝桥骑士
// Contest: Lanqiao
// URL:
// https://www.lanqiao.cn/problems/1188/learning/?page=1&first_category_id=1&second_category_id=8&status=1&sort=students_count&asc=0
// Memory Limit: 128 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
using PII = pair<int, int>;
const int N = 1e5 + 5;
void solve() {
int n;
cin >> n;
vector<int> a(n), d;
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < n; i++) {
auto it = lower_bound(d.begin(), d.end(), a[i]);
if (it == d.end()) {
d.push_back(a[i]);
} else {
*it = a[i];
}
}
cout << d.size();
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
solve();
return 0;
}
/*
* _oo0oo_
* o8888888o
* 88" . "88
* (| -_- |)
* 0\ = /0
* ___/`---'\___
* .' \\| |// '.
* / \\||| : |||// \
* / _||||| -:- |||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' |_/ |
* \ .-\__ '-' ___/-. /
* ___'. .' /--.--\ `. .'___
* ."" '< `.___\_<|>_/___.' >' "".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `_. \_ __\ /__ _/ .-` / /
* =====`-.____`.___ \_____/___.-`___.-'=====
* `=---='
*
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 佛祖保佑 永不宕机 永无BUG
*/