Pagini recente » Cod sursa (job #2942713) | Cod sursa (job #516398) | Cod sursa (job #1013700) | Cod sursa (job #1218735) | Cod sursa (job #2142484)
#include <fstream>
#define NM 100001
using namespace std;
int n,a[NM],P[NM],L,Q[NM],lg,S[NM];
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void scrie()
{
int k,i;
k=n;
for(i=lg;i>=1;i--)
{
while(P[k]!=i)
k--;
S[i]=a[k];
}
fout<<lg<<'\n';
for(i=1;i<=lg;i++)
fout<<S[i]<<' ';
}
void adaug(int v,int i)
{
int st,dr,mij,poz;
st=1;dr=lg;
poz=-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(Q[mij]>=v)
{
poz=mij;
dr=mij-1;
}
else st=mij+1;
}
if(poz==-1)
{
lg++;
poz=lg;
}
Q[poz]=v;
P[i]=poz;
}
int main()
{
int i;
fin>>n;
for(i=1;i<=n;i++)
fin>>a[i];
lg=0;
for(i=1;i<=n;i++)
adaug(a[i],i);
scrie();
}