Pagini recente » Cod sursa (job #1767406) | Cod sursa (job #2075934) | Cod sursa (job #120994) | Cod sursa (job #1498358) | Cod sursa (job #3256379)
#include <bits/stdc++.h>
#define lim 100010
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int dp[lim], v[lim], dad[lim], lmax, n;
int bs(int val)// cel mai din dreapta elem < val
{
int pz, mask;
for(mask=1; mask<=lmax; mask<<=1);
pz=0;
for(;mask; mask>>=1)
if(pz+mask<=lmax)
if(v[dp[pz+mask]]<val)
pz+=mask;
return pz;
}
void parc(int n)
{
if(dad[n])
parc(dad[n]);
out<<v[n]<<' ';
}
int main()
{
int n, pz;
in>>n;
for(int i=1; i<=n; i++)
in>>v[i];
v[0]= 1<<30;
for(int i=1; i<=n; i++)
{
pz=bs(v[i]);
lmax=max(lmax, pz+1);
dp[pz+1]=i;
dad[i]=dp[pz];
}
out<<lmax<<'\n';
parc(dp[lmax]);
}