Pagini recente » Cod sursa (job #2479304) | Cod sursa (job #805438) | Cod sursa (job #1100101) | Cod sursa (job #368935) | Cod sursa (job #3259495)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int t[100005],dp[100005],poz[100005],ans[100005];
void cautbin(int num,int k,int i)
{
int st,dr,mid,ans=-1;
st=1;
dr=k;
while(st<=dr)
{
mid=(st+dr)/2;
if(dp[mid]>=num)
{
ans=mid;
dr=mid-1;
}
else
{
st=mid+1;
}
//cout<<"ans="<<ans<<" ";
}
poz[i]=ans;
dp[ans]=num;
//cout<<'\n';
}
int main()
{
int n,i,k=1,caut,j;
fin>>n;
caut=n;
for(i=1;i<=n;++i)
{
fin>>t[i];
}
dp[1]=t[1];
k=1;
poz[1]=1;
for(i=2;i<=n;++i)
{
if(t[i]>dp[k])
{
dp[++k]=t[i];
poz[i]=k;
}
else
{
cautbin(t[i],k,i);
}
for(j=1;j<=k;++j)
{
//cout<<dp[j]<<' ';
}
//cout<<'\n';
}
for(i=1;i<=n;++i)
{
//cout<<poz[i]<<' ';
}
fout<<k<<'\n';
for(i=k;i>=1;--i)
{
while(poz[caut]!=i)
--caut;
ans[i]=t[caut];
}
for(i=1;i<=k;++i)
{
fout<<ans[i]<<' ';
}
return 0;
}