Pagini recente » Cod sursa (job #830298) | Cod sursa (job #269661) | Cod sursa (job #2459354) | Cod sursa (job #2349936) | Cod sursa (job #3259491)
#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 st,dr,mid,ans;
st=1;
dr=k;
while(st<=dr)
{
mid=(st+dr)/2;
if(dp[mid]>num)
{
dr=mid-1;
}
else
{
ans=mid;
st=mid+1;
}
}
dp[mid]=num;
}
int main()
{
int n,i,k=1,caut;
fin>>n;
caut=n;
for(i=1;i<=n;++i)
{
fin>>t[i];
}
dp[1]=t[1];
k=1;
poz[i]=1;
for(i=2;i<=n;++i)
{
if(t[i]>dp[k])
{
dp[++k]=t[i];
}
else
{
cautbin(t[i],k);
}
poz[i]=k;
}
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;
}