Pagini recente » Cod sursa (job #203363) | Cod sursa (job #1395738) | Cod sursa (job #1539604) | Rating Alexandru Obreja (Xelaeth) | Cod sursa (job #2613540)
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int v[100001],l[100001],d[100001],rez[100001];
int main ()
{
int k=0, n, i, st, dr, m, ck, poz;
cin>>n;
for (i=1; i<=n; i++)
{
cin>>v[i];
if (v[i]>l[k])
{
k++;
l[k]=v[i];
d[i]=k;
}
else
{
st=1;
dr=k;
while (st<=dr)
{
m=(st+dr)/2;
if (l[k]>=v[i])
{
poz=k;
dr=m-1;
}
else
st=m+1;
}
l[poz]=v[i];
d[i]=poz;
}
}
cout<<k<<'\n';
ck=k;
for (i=n; i>=1; i--)
if (d[i]==ck)
{
rez[ck]=v[i];
ck--;
}
for (i=1; i<=k; i++)
cout<<rez[i]<<" ";
return 0;
}