Pagini recente » Cod sursa (job #2563355) | Cod sursa (job #2812683) | Cod sursa (job #56462) | Cod sursa (job #2542065) | Cod sursa (job #2365443)
#include <bits/stdc++.h>
using namespace std;
const int mxn = 100 * 1000 + 10;
int n;
int CeilIndex(vector<int>& v, int l, int r, int key)
{
while (r - l > 1) {
int m = l + (r - l) / 2;
if (v[m] >= key)
r = m;
else
l = m;
}
return r;
}
int solve(vector<int>& v)
{
if (v.size() == 0)
return 0;
vector<int> tail(v.size(), 0);
int length = 1;
tail[0] = v[0];
for (size_t i = 1; i < v.size(); i++) {
if (v[i] < tail[0])
tail[0] = v[i];
else if (v[i] > tail[length - 1])
tail[length++] = v[i];
else
tail[CeilIndex(tail, -1, length - 1, v[i])] = v[i];
}
return length;
}
int main()
{
ifstream cin("scmax.in");
ofstream cout("scmax.out");
cin>> n;
vector< int > v;
for(int i = 1, x; i <= n; i++){
cin>> x;
v.push_back( x );
}
cout<< solve( v );
return 0;
}