Pagini recente » Cod sursa (job #1771160) | Cod sursa (job #938830) | Cod sursa (job #27340) | Cod sursa (job #2868021) | Cod sursa (job #1828593)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
const int N=100010;
int n,i,j,x[N],link[N],p[N],v[N],L,lo,hi,mi;
int main()
{
f>>n;
for(i=1; i<=n; i++)
f>>x[i];
v[1]=x[1];
p[1]=1;
L=1;
for(i=2;i<=n;i++)
{
if(x[i]>v[L])
{
L++;
v[L]=x[i];
p[L]=i;
link[i]=p[L-1];
continue;
}
lo=0;
hi=L;
while(lo<hi-1)
{
mi=(lo+hi)/2;
if(v[mi]<x[i])
lo=mi;
else
hi=mi;
}
link[i]=p[lo];
if(x[i]<v[hi])
{
v[hi]=x[i];
p[hi]=i;
}
}
for(i=p[L],j=L;j>=1;j--,i=link[i])
v[j]=x[i];
g<<L<<'\n';
for(i=1;i<=L;i++)
g<<v[i]<<' ';
return 0;
}