Pagini recente » Cod sursa (job #165542) | Cod sursa (job #2661211) | Cod sursa (job #2687193) | Cod sursa (job #178774) | Cod sursa (job #3175690)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, a[100009], l[100009], poz[100009], sol[100009], lg=1;
int main()
{
fin>>n;
for(int i=1; i<=n; i++)
{
fin>>a[i];
}
l[lg]=a[1];
poz[1]=1;
for(int i=2; i<=n; i++)
{
if(a[i]>l[lg])
{
lg++;
l[lg]=a[i];
poz[i]=lg;
}
else
{
int st=1, dr=lg, p=lg+1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(l[mij]>=a[i])
{
p=mij;
dr=mij-1;
}
else
{
st=mij+1;
}
}
l[p]=a[i];
poz[i]=p;
}
}
fout<<lg<<"\n";
int j=n;
for(int i=lg; i>0; i--)
{
while(poz[j]!=i)
{
j--;
}
sol[i]=j;
}
for(int i=1; i<=lg; i++)
{
fout<<a[sol[i]]<<" ";
}
return 0;
}