Pagini recente » Cod sursa (job #2152461) | Cod sursa (job #619458) | Cod sursa (job #437126) | Cod sursa (job #61202) | Cod sursa (job #1787013)
#include <iostream>
#include <fstream>
#define NMAX 100004
using namespace std;
int maxi, n, v[NMAX], p[NMAX], l[NMAX];
int cb (int x)
{
int l1 = 0, l2 = maxi, pp = maxi;
while (l1 <= l2)
{
int mid = (l1 + l2) / 2;
if (v[l[mid]] < x)
{
pp = mid;
l1 = mid + 1;
}
else l2 = mid - 1;
}
return pp;
}
int sol[NMAX];
int main ()
{
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> v[i];
}
int ps = 0;
l[1] = v[1];
for (int i = 1; i <= n; i++)
{
int lmax = cb(v[i]);
l[lmax + 1] = i;
p[i] = l[lmax];
if (lmax + 1 > maxi){
ps = i;
maxi = lmax + 1;
}
}
int nr = 0;
cout << maxi << "\n";
nr++;
sol[nr] = v[ps];
while (p[ps] != 0)
{
nr++;
sol[nr] = v[p[ps]];
ps = p[ps];
}
for (int i = maxi; i >= 1; i--)
cout << sol[i] << " ";
return 0;
}