Pagini recente » Cod sursa (job #1598107) | Cod sursa (job #2862110) | Cod sursa (job #2924483) | Cod sursa (job #2202483) | Cod sursa (job #2639734)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,v[10001],c[10001],a[10001],t,st,dr,poz,mij,b[10001],k;
int main()
{
fin>>n;
for (i=1;i<=n;i++)
{
fin>>v[i];
}
a[1]=v[1];
t=1;
c[1]=1;
for (i=2;i<=n;i++)
{
//plasez elementul v[i] in a astpef incat sirul a este crescator
if (v[i]>a[t]) {a[++t]=v[i];
c[i]=t;}
else {
//caut binar pozitia
st=1;
dr=t;
poz=0;
while (st<=dr)
{
mij=(st+dr)/2;
if (a[mij]>=v[i]) {poz=mij;
dr=mij-1;}
else {st=mij+1;}
}
a[poz]=v[i];
c[i]=poz;
}
}
fout<<t<<'\n';
k=0;
for (i=n;i>=1;i--)
{
if (c[i]==t) {b[++k]=v[i];t--;}
if (t==0) break;
}
for (i=k;i>0;i--)
fout<<b[i]<<" ";
return 0;
}