Pagini recente » Cod sursa (job #1537610) | Cod sursa (job #448363) | Cod sursa (job #2290473) | Cod sursa (job #984126) | Cod sursa (job #2564587)
#include <bits/stdc++.h>
const int inf=2e9;
const int nmax=2e5;
using namespace std;
int a[nmax],p[nmax];
void afisare(int pos)
{
for(int i=pos-1;i>=0;i--)
if(p[i]+1==p[pos])
{
afisare(i);
break;
}
cout<<a[pos]<<" ";
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n;
cin>>n;
vector<int>dp(n+1,inf);
dp[0]=-inf;
int ans=0,mx;
for(int i=0;i<n;i++)
{
cin>>a[i];
int pos=(upper_bound(dp.begin(),dp.end(),a[i])-dp.begin());
if(dp[pos-1]<a[i] && a[i]<dp[pos])
{
dp[pos]=a[i];
if(pos>ans)
{
ans=pos;
mx=i;
}
p[i]=pos;
}
}
cout<<ans<<"\n";
//for(int i=0;i<n;i++) cout<<p[i]<<" ";
//cout<<"\n";
afisare(mx);
}