Pagini recente » Monitorul de evaluare | Diferente pentru problema/beyond_the_wall intre reviziile 22 si 21 | Borderou de evaluare (job #3102493) | Diferente pentru problema/cri intre reviziile 17 si 13 | Cod sursa (job #3315695)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[100001];
int dp[100001];
int indexx[100001];
int constr[100001];
int main(){
int n;
fin>>n;
for(int i=1;i<=n;i++){
fin>>v[i];
dp[i]=1;
indexx[i]=-1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
if(v[j]<v[i] && dp[i]<dp[j]+1){
dp[i]=dp[j]+1;
indexx[i]=j;
}
}
}
int maxx=0;
int r=0;
for(int i=1;i<=n;i++){
if(dp[i]>maxx){
maxx=dp[i];
r=i;
}
}
fout<<maxx<<'\n';
int j = maxx;
constr[j] = v[r];
while (indexx[r] != -1) {
r = indexx[r];
constr[--j] = v[r];
}
for(int i=1;i<=maxx;i++){
fout<<constr[i]<<" ";
}
}