Pagini recente » Cod sursa (job #2391060) | Cod sursa (job #2668506) | Cod sursa (job #522609) | Cod sursa (job #46899) | Cod sursa (job #3214042)
#include <bits/stdc++.h>
#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
///#include <tryhardmode>
///#include <GODMODE::ON>
using namespace std;
#define cin fin
#define cout fout
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
const int NMAX=1e5+5;
int poz[NMAX];
int dp[NMAX];
int v[NMAX];
int cautbin(int x,int st,int dr)
{
int mij,ans=0;
while(st<=dr)
{
mij=st+dr;
mij/=2;
if(v[poz[mij]]<x)
{
ans=mij;
st=mij+1;
}
else
dr=mij-1;
}
return ans;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n,i,j,best=0;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
for(i=1;i<=n;i++)
{
int p=cautbin(v[i],0,best);
poz[p+1]=i;
dp[i]=p+1;
best=max(best,p+1);
}
cout<<best<<"\n";
vector<int>ans;
for(i=n;i>=1;i--)
{
if(dp[i]==best)
{
ans.push_back(i);
best--;
}
}
reverse(ans.begin(),ans.end());
for(auto i:ans)
cout<<v[i]<<" ";
return 0;
}