Pagini recente » Cod sursa (job #559249) | Cod sursa (job #683351) | Cod sursa (job #1403358) | Cod sursa (job #1613129) | Cod sursa (job #2342488)
#include <iostream>
#include <fstream>
#define Nmax 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
int a[Nmax], best[Nmax], pre[Nmax], sol[Nmax];
int main()
{
f >> n;
for (int i = 1; i <= n; i++)
f >> a[i];
best[1]=1;
int k=1;
for (int i = 2; i <= n; i++)
{
int st=1, dr=k, mj=0;
while(st <= dr)
{
mj=(st+dr)/2;
if(a[best[mj]] < a[i])
st=mj+1;
else dr=mj-1;
}
if(st>k)
k++;
best[st]=i;
pre[i]=best[st-1];
}
g << k << '\n';
int i=best[k], j=0;
while(i!=0)
{
sol[++j]=i;
i=pre[i];
}
for (int i = k; i >= 1; i--)
g << a[sol[i]] << " " ;
return 0;
}