Pagini recente » Cod sursa (job #2061602) | Cod sursa (job #1418611) | Cod sursa (job #2572242) | Cod sursa (job #393686) | Cod sursa (job #2370220)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int coada[100005],recon[100005],v[100005],k;
int main()
{
int i,j,n;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>v[i];
if(v[i]>v[coada[k]])
{
coada[++k]=i;
recon[i]=coada[k-1];
}
else
{
int st=1,dr=k,mij=(st+dr)/2,sol;
while(st<=dr)
{
if(v[i]<=v[coada[mij]])
{
dr=mij-1;
sol=mij;
}
else
st=mij+1;
mij=(st+dr)/2;
}
coada[sol]=i;
recon[i]=coada[sol-1];
}
}
fout<<k<<'\n';
int sol[100005];
sol[k]=v[coada[k]];
int pas=1;
i=coada[k];
while(recon[i]!=0)
{
i=recon[i];
sol[k-pas]=v[i];
pas++;
}
for(i=1;i<=k;i++)
fout<<sol[i]<<" ";
return 0;
}