Pagini recente » Cod sursa (job #409267) | Cod sursa (job #2049723) | Cod sursa (job #934980) | Cod sursa (job #2438385) | Cod sursa (job #2341412)
#include <bits/stdc++.h>
#define Dim 100006
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int N,V[Dim],Q[Dim],P[Dim],A[Dim];
int k,lg,cnt=1,rep;
int main()
{
f>>N;
for(int i=1;i<=N;i++) f>>V[i];
lg=1;
Q[1]=V[1];
P[1]=1;
for(int i=2;i<=N;i++)
{
int st=1,dr=lg;
int gasit=-1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(V[i]<=Q[mij])
{
gasit=mij;
dr=mij-1;
}
else
st=mij+1;
}
if(gasit==-1)
{
lg++;
Q[lg]=V[i];
P[++cnt]=lg;
}
else
{
Q[gasit]=V[i];
P[++cnt]=gasit;
}
}
g<<lg<<'\n';
rep=lg;
for(int i=cnt;i>=1&&rep>=1;i--)
{
if(P[i]==rep)
{
rep--;
A[++k]=i;
}
}
for(int i=k;i>=1;i--)
g<<V[A[i]]<<" ";
return 0;
}