Pagini recente » Cod sursa (job #1670302) | Cod sursa (job #2546511) | Cod sursa (job #391555) | Cod sursa (job #3289607) | Cod sursa (job #2158194)
#include <iostream>
#include <fstream>
using namespace std;
int a[100001],t[100001],last[100001],ind[100001];
int main()
{
ifstream fin("scmax.in");
int n,i,k,st,dr,m;
fin>>n;
fin>>a[1];
t[1]=0;last[k=1]=a[1];ind[1]=1;
for(i=2;i<=n;i++)
{
fin>>a[i];
if(a[i]>last[k])
{
last[++k]=a[i];ind[k]=i;t[i]=ind[k-1];
}
else
{
st=1;dr=k;m=(st+dr)/2;
while(st<dr)
{
if(a[i]>last[m])st=m+1;
else dr=m;
m=(st+dr)/2;
}
last[st]=a[i];
t[i]=ind[st-1];
ind[st]=i;
}
}
i=ind[k];
int j=k;
while(i)
{
last[j--]=a[i];
i=t[i];
}
ofstream fout("scmax.out");
fout<<k<<"\n";
for(i=1;i<=k;i++)fout<<last[i]<<" ";
return 0;
}