Pagini recente » Cod sursa (job #2078480) | Cod sursa (job #2029195) | Cod sursa (job #2481785) | Cod sursa (job #2553617) | Cod sursa (job #2918129)
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX=100005;
///dp[i]=minimum ending value of an increasing subsequence of length i, using the elements considered so far
int N, v[NMAX], dp[NMAX], nr, L[NMAX], nxt=INT_MAX;
void afisare(int val, int poz){
if(val!=0)
{
while(L[poz]!=val or v[poz]>=nxt)
poz--;
nxt=v[poz];
afisare(val-1,poz);
fout<<v[poz]<<' ';
}
}
int main()
{
fin>>N;
for(int i=1;i<=N;i++)
fin>>v[i];
dp[++nr]=v[1];
L[1]=1;
for(int i=2;i<=N;i++){
int poz=lower_bound(dp+1,dp+nr+1,v[i])-dp;
if(poz>nr)
nr++;
dp[poz]=v[i];
L[i]=poz;
}
fout<<nr<<'\n';
afisare(nr,N);
fin.close();
fout.close();
return 0;
}