Pagini recente » Cod sursa (job #1841050) | Cod sursa (job #2647001) | Cod sursa (job #918772) | Cod sursa (job #1378345) | Cod sursa (job #2717854)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int dp[100005],poz[100005],k,v[100005],n;
vector<int>ans;
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>v[i];
k=1;
dp[1]=v[1];
poz[1]=1;
for(int i=2;i<=n;i++)
{
if(v[i]>dp[k])
{
dp[++k]=v[i];
poz[i]=k;
}
else
{
int st=1,dr=k,pozitie=0;
while(st<=dr)
{
int mijl=(st+dr)/2;
if(dp[mijl]>=v[i])
{
pozitie=mijl;
dr=mijl-1;
}
else
st=mijl+1;
}
dp[pozitie]=v[i];
poz[i]=pozitie;
}
}
fout<<k<<'\n';
int j=n;
for(int i=k;i>=1;i--)
{
while(poz[j]!=i)
j--;
ans.push_back(v[j]);
}
reverse(ans.begin(),ans.end());
for(int i=0;i<ans.size();i++)
fout<<ans[i]<<" ";
return 0;
}