Pagini recente » Cod sursa (job #1685234) | Cod sursa (job #196341) | Cod sursa (job #1778405) | Cod sursa (job #735516) | Cod sursa (job #2059747)
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 100005
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[nmax],d[nmax],t[nmax],lung[nmax];
int n,k=1,mx=0;
void afis(int x)
{
if (x)
{
afis(t[x]);
g<<v[x]<<' ';
}
}
int main()
{
f>>n;
for (int i=1; i<=n; ++i)
f>>v[i];
t[1]=0;
d[1]=1;
for (int i=2; i<=n; ++i)
{
int p=0;
int u=k;
while (p<=u)
{
int mid=(p+u)/2;
if (v[d[mid]]<v[i])
p=mid+1;
else
u=mid-1;
}
if (p>k)
k=p;
d[p]=i;
lung[i]=p;
t[i]=d[p-1];
}
for (int i=1; i<=n; ++i)
if (lung[mx]<lung[i])
mx=i;
g<<lung[mx]<<'\n';
afis(mx);
return 0;
}