POJ3903 Stock Exchange
1 #include <iostream>
2 #include <cstdio>
3 #include <vector>
4 #include <algorithm>
5 using namespace std;
6 const int maxn = 1e5+5;
7 int a[maxn];
8 int main() {
9 int n;
10 while (~scanf("%d",&n)) {
11 for (int i = 1; i <= n; ++i) scanf("%d",&a[i]);
12 vector<int> ve;
13 ve.push_back(a[1]);
14 for (int i = 2; i <= n; ++i) {
15 if (ve[ve.size()-1] < a[i]) {
16 // 如果新进来的数比最后一个数大,那么直接插入
17 ve.push_back(a[i]);
18 }
19 else {
20 ve[lower_bound(ve.begin(),ve.end(),a[i])-ve.begin()] = a[i];
21 }
22 }
23 printf("%d\n",ve.size());
24 }
25 return 0;
26 }