Pagini recente » Cod sursa (job #1462296) | Cod sursa (job #1716131) | Cod sursa (job #1340518) | Cod sursa (job #385318) | Cod sursa (job #2485892)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int ind[100005],a[100005];
/*void afisare(int i,int k)
{
if (i<=0)
return;
while(ind[k]>=i)
{
k--;
}
afisare(i-1,k);
fout<<a[k]<<' ';
}*/
void afisare(int i)
{
int aux=i;
int caut=ind[i]-1;
if (caut==0||i==0)
{
fout<<a[i]<<' ';
return;
}
while(i>0&&ind[i]!=caut)
i--;
afisare(i);
fout<<a[aux]<<' ';
}
int main()
{
int n,v[100005],k=1,l=1,maxi=-1,imax=1;
fin>>n;
for (int i=1;i<=n;i++)
fin>>a[i];
v[1]=a[1];
ind[1]=1;
for (int i=2;i<=n;i++)
{
if (a[i]>v[k])
{
k++;
v[k]=a[i];
l++;
ind[l]=ind[l-1]+1;
if (ind[l]>maxi)
{
maxi=ind[l];
imax=l;
}
}
else
{
int st=1,dr=i,mij;
while (st<=dr)
{
mij=(st+dr)/2;
if (a[i]<=v[mij])
dr=mij-1;
else
st=mij+1;
}
//cout<<a[i]<<' '<<st<<endl;
v[st]=a[i];
ind[++l]=st;
if (st>maxi)
{
maxi=st;
imax=l;
}
}
}
/*cout<<endl;
for (int i=1;i<=k;i++)
cout<<v[i]<<' ';
cout<<endl;
for (int i=1;i<=n;i++)
cout<<ind[i]<<' ';
cout<<endl;
//afisare(maxi,imax);
cout<<imax<<' '<<maxi<<endl;*/
fout<<maxi<<'\n';
afisare(imax);
return 0;
}