Pagini recente » Cod sursa (job #2269713) | Cod sursa (job #618980) | Cod sursa (job #3003153) | Cod sursa (job #1459982) | Cod sursa (job #2647951)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,j,v[100005],a[100005],x[100005],m,k,p,u,mij,sol,st[100005],nr;
int main()
{
fin >>n;
for (i=1;i<=n;i++)
{
fin >>v[i];
}
a[1]=1;
x[1]=v[1];
m=1;
for (i=2;i<=n;i++)
{
//suprascriu pe v[i] in vectorul x sau il adaug
if (x[m]<v[i]) {m++;x[m]=v[i];a[i]=m;sol=i;}
else
{
p=1;
u=m;
k=1;
while (p<=u)
{
mij=(p+u)/2;
if (x[mij]>=v[i]) {k=mij;u=mij-1;}
else p=mij+1;
}
x[k]=v[i];
a[i]=k;
if (k==m) sol=i;
}
}
fout <<m<<'\n';
while (m>0)
{
nr++;
st[nr]=v[sol];
m--;
for (i=sol-1;i>=1;i--)
{
if (a[i]==m&&v[i]<v[sol]) {sol=i;break;}
}
}
for (i=nr;i>=1;i--)
{
fout <<st[i]<<" ";
}
return 0;
}