Pagini recente » Cod sursa (job #1473031) | Cod sursa (job #1596159) | Cod sursa (job #2772215) | Cod sursa (job #1562329) | Cod sursa (job #2465412)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int MAXN = 1e5 + 5;
vector <int> ans;
int dp[MAXN] , last[MAXN], v[MAXN];
int binary_Search(int n, int l){
int current = 0;
for(int power = 30; power >= 0; --power){
int k = current + ( 1 << power );
if(k <= l and v[dp[k]] < v[n])
current += (1 << power);
}
current++;
return current ;
}
int main(){
int n, l = 0;
fin >> n;
for(int i = 1; i <= n; ++i){
fin >> v[i];
}
dp[0] = 0, last[0] = -1, v[0] = -1 ;
for(int i = 1; i <= n; ++i){
int k = binary_Search(i, l);
l = max(k , l);
dp[k] = i;
last[i] = dp[k - 1];
}
int indice = dp[l] ;
ans.push_back(indice);
while(last[indice] > 0){
ans.push_back(last[indice]);
indice = last[indice];
}
fout << l << '\n';
for(int i = ans.size() - 1; i >= 0; --i)
fout << v[ans[i]] << " ";
return 0;
}