Pagini recente » Cod sursa (job #696320) | Cod sursa (job #37617) | Cod sursa (job #1439044) | Cod sursa (job #543402) | Cod sursa (job #1495754)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int dp[100005],n,k,a[100005];
long long CB(int x)
{
long long st,dr,mij,sol;
st = 1;
dr = k;
sol = 1;
while(st<=dr)
{
mij = (st+dr)/2;
if(dp[mij]<x) st = mij+1;
else if(dp[mij]>x)
{
dr = mij-1;
sol = mij;
}
else dr = mij-1;
}
return sol;
}
int main()
{
int i;
long long p;
fin>>n;
for(i=1;i<=n;i++) fin>>a[i];
dp[1] = a[1];
k = 1;
for(i=2;i<=n;i++)
{
if(a[i]>dp[k]) dp[++k] = a[i];
else if(a[i]<dp[1]) dp[1] = a[i];
else
{
p = CB(a[i]);
if(dp[p]>a[i]) dp[p] = a[i];
}
}
fout<<k<<"\n";
sort(dp+1,dp+k+1);
for(i=1;i<=k;i++) fout<<dp[i]<<" ";
fout.close();
return 0;
}