Pagini recente » Cod sursa (job #768250) | Cod sursa (job #429526) | Cod sursa (job #470839) | Cod sursa (job #688666) | Cod sursa (job #2422240)
#include <bits/stdc++.h>
#define NM 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int lgm,v[NM],t[NM],dp[NM],sol[NM];
int CB(int x)
{ int st=1,dr=lgm,sol=0;
while(st<=dr)
{ int mij=(st+dr)/2;
if(t[mij]<x)
{ st=mij+1;
sol=max(sol,mij);
}
else dr=mij-1;
}
return sol;
}
int main()
{ int n;
f>>n;
for(int i=1; i<=n; i++) f>>v[i];
dp[1]=lgm=1;
t[1]=v[1];
for(int i=2; i<=n; i++)
{ int poz=CB(v[i]);
if(poz==lgm) lgm++;
dp[i]=poz+1;
t[poz+1]=v[i];
}
int poz=0;
for(int i=1; i<=n; i++)
if(dp[i]>dp[poz]) poz=i;
g<<dp[poz]<<'\n';
int lg=dp[poz],k=0;
for(int i=poz; lg; i--)
if(dp[i]==lg) sol[++k]=v[i],lg--;
///for(int i=1; i<=n; i++) g<<dp[i]<<' ';
while(k) g<<sol[k--]<<' ';
return 0;
}