Pagini recente » Cod sursa (job #703060) | Cod sursa (job #2686747) | Cod sursa (job #170951) | Cod sursa (job #124729) | Cod sursa (job #2072973)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int k,dp[100002],n,a[100002],poz[100002],aux[100002];
int Caut_bin(int x)
{
int st,dr,mij,p;
st=1;
dr=p=k;
while(st<=dr)
{
mij=(st+dr)/2;
if(dp[mij]>=x)
{
p=mij;
dr=mij-1;
}
else st=mij+1;
}
return p;
}
int main()
{
int i,x;
fin>>n;
for(i=1;i<=n;i++)
fin>>a[i];
k=1;
dp[k]=a[1];
poz[1]=1;
for(i=2;i<=n;i++)
{
if(a[i]>dp[k])
{
dp[++k]=a[i];
poz[i]=k;
}
else if(a[i]<=dp[1])
{
dp[1]=a[i];
poz[i]=1;
}
else
{
x=Caut_bin(a[i]);
dp[x]=a[i];
poz[i]=x;
}
}
fout<<k<<"\n";
x=k;
for(i=n;i>=1 && x>0;i--)
if(poz[i]==x)
{
aux[x]=a[i];
x--;
}
for(i=1;i<=k;i++)
fout<<aux[i]<<" ";
return 0;
}