Pagini recente » Cod sursa (job #36565) | Cod sursa (job #2524551) | Cod sursa (job #1813674) | Cod sursa (job #1960576) | Cod sursa (job #3261342)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
vector<int> sub;
vector<int> adj(100001);
vector<int> dp(100001);
vector<int> a(100001);
void DFS(int x){
if(adj[x] == 0){
sub.push_back(a[x]);
return;
}
sub.push_back(a[x]);
DFS(adj[x]);
}
int main(){
int n;
fin >> n;
for(int i = 1; i <= n; i++){
fin >> a[i];
}
//notam dp[i] lungimea sirului crescator maximal pe poz i
dp[1] = 1;
for(int i = 2; i <= n; i++){
int maxi = 0;
adj[i] = 0;
for(int j = i - 1; j >= 1; j--){
if(a[j] < a[i] && dp[j] > maxi){
maxi = dp[j];
adj[i] = j;
}
}
dp[i] = maxi + 1;
}
int ans = 0;
int poz;
for(int i = 1; i <= n; i++){
if(dp[i] > ans){
ans = dp[i];
poz = i;
}
}
fout << ans << '\n';
DFS(poz);
for(int i = sub.size() - 1; i >= 0; i--){
fout << sub[i] << " ";
}
return 0;
}