Pagini recente » Cod sursa (job #1520017) | Cod sursa (job #208842) | Cod sursa (job #430133) | Cod sursa (job #81968) | Cod sursa (job #2569564)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int DIM = 1e5 + 7;
int v[DIM];
int bst[DIM];
int f[DIM];
int main()
{
int n;
in >> n;
for(int i = 1; i <= n; i++)
in >> v[i];
int k = 1;
bst[1] = 1;
for(int i = 1; i <= n; i++)
{
int l = 1;
int r = k;
int ans = 0;
while(l <= r)
{
int mid = (l + r) / 2;
if(v[bst[mid]] < v[i])
{
ans = mid;
l = mid + 1;
}
else
r = mid - 1;
}
ans++;
if(ans > k)
k++;
bst[ans] = i;
f[i] = bst[ans - 1];
}
out << k <<'\n';
int poz = bst[k];
vector <int> rez;
while(poz)
{
rez.push_back(poz);
poz = f[poz];
}
for(int i = rez.size() - 1; i >= 0; i--)
out << v[rez[i]] <<" ";
return 0;
}