Pagini recente » Cod sursa (job #754318) | Cod sursa (job #1101776) | Istoria paginii runda/cerculdeinfo-lectiile9_10_11_12_13/clasament | Cod sursa (job #823595) | Cod sursa (job #809288)
Cod sursa(job #809288)
#include <fstream>
#define NM 100010
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int N;
int i,j,k;
int L[NM],S[NM];
int V[NM];
int X;
int ANS=0;
int GetPos (int X)
{
int P=0, U=ANS, M, R=1;
while (P<=U)
{
M=(P+U)/2;
if (X>S[M])
{
P=M+1;
R=M;
}
else
U=M-1;
}
return R+1;
}
int main ()
{
f >> N;
for (i=1; i<=N; i++)
{
f >> X;
j=GetPos(X);
L[i]=j;
S[j]=X;
if (j>ANS)
{
ANS=j;
k=i;
}
V[i]=X;
}
g << ANS << '\n';
while (k>=1)
{
S[++S[0]]=V[k];
for (i=k; i>=0; i--)
if (L[i]+1==L[k])
{
k=i;
break;
}
}
for (i=S[0]; i>=1; i--)
g << S[i] << ' ';
g << '\n';
f.close();
g.close();
return 0;
}