Pagini recente » Cod sursa (job #1752149) | Cod sursa (job #1428114) | Cod sursa (job #2337447) | Cod sursa (job #1565525) | Cod sursa (job #2443444)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int Nmax = 100000 + 5;
int n, a[Nmax], b[Nmax], len, poz[Nmax], par[Nmax];
void solve(int x, int ln)
{
if(par[x] != 0)solve(par[x], ln - 1);
fout << a[x] << ' ';
}
int caut_bin(int x)
{
int lo = -1, hi = len;
while(hi - lo > 1)
{
int mid = lo + (hi - lo) / 2;
if(b[mid] >= x)hi = mid;
else lo = mid;
}
if(b[hi] < x)hi++;
return hi;
}
int main()
{
fin >> n;
for(int i = 1; i <= n; ++i)
fin >> a[i];
for(int i = 1; i <= n; ++i)
{
int p = caut_bin(a[i]);
b[p] = a[i];
if(p > len)++len;
poz[p] = i;
if(p > 0)par[i] = poz[p - 1];
}
fout << len << '\n';
solve(poz[len], len);
return 0;
}