Pagini recente » Cod sursa (job #1755262) | Cod sursa (job #993491) | Cod sursa (job #2566091) | Cod sursa (job #18448) | Cod sursa (job #2361925)
#include <bits/stdc++.h>
#define Nmax 100003
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[Nmax],best[Nmax],p[Nmax],L[Nmax];
int n,maxim,k,nr=1,poz;
void afis(int i)
{
if(p[i]>0)afis(p[i]);
g<<v[i]<<" ";
}
int caut(int x)
{
int st=1,dr=nr,md;
while(st<=dr)
{
md=(st+dr)/2;
if(v[L[md]]<x and v[L[md+1]]>=x)return md;
else if(v[L[md+1]]<x)st=md+1;
else dr=md-1;
}
return nr;
}
int main()
{
int i;
f>>n;
for(i=1;i<=n;i++)f>>v[i];
best[1]=L[1]=1;L[0]=0;
for(i=2;i<=n;i++)
{
poz=caut(v[i]);
p[i]=L[poz];
best[i]=poz+1;
L[poz+1]=i;
if(nr<poz+1)nr=poz+1;
}
maxim=0;poz=0;
for(i=1;i<=n;i++)
if(maxim<best[i])maxim=best[i],poz=i;
g<<maxim<<"\n";
afis(poz);
return 0;
}