Pagini recente » Cod sursa (job #219088) | Cod sursa (job #161417) | Cod sursa (job #1801835) | Cod sursa (job #2367166) | Cod sursa (job #1645520)
#include <fstream>
#define NMax 100100
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int nr,n,i,bestAct;
int best[NMax];
int a[NMax];
int v[NMax];
int selectedFor[NMax];
void BinarySearch(int target)
{
int in=1,sf=nr;
int mij=(in+sf)/2;
while(in<=sf)
{
if(best[mij]==target)
return;
if(best[mij]<target)
in=mij+1;
else
sf=mij-1;
mij=(in+sf)/2;
}
best[in]=target;
selectedFor[i]=in;
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>a[i];
if(a[i]>best[nr])
{
best[++nr]=a[i];
selectedFor[i]=nr;
bestAct=i;
}
else
{
BinarySearch(a[i]);
}
}
fout<<nr<<'\n';
int searchFor=nr;
for(i=bestAct;i>=1;i--)
if(selectedFor[i]==searchFor)
v[searchFor]=a[i],searchFor--;
for(i=1;i<=nr;i++)
fout<<v[i]<<' ';
return 0;
}