Pagini recente » Cod sursa (job #1940948) | Cod sursa (job #1760682) | Cod sursa (job #432016) | Cod sursa (job #770446) | Cod sursa (job #1897033)
#include <iostream>
#include <fstream>
#include <algorithm>
#define infile "scmax.in"
#define outfile "scmax.out"
using namespace std;
ifstream in(infile);
ofstream out(outfile);
int n;
int sir[100001];
int a[100000];
int b[100000];
int lung_a = 0;
int scmax[10000];
void ceva(int pos)
{
int val = sir[pos];
if(val > a[lung_a]){
lung_a++;
a[lung_a] = val;
b[pos] = lung_a;
}else{
int *up = upper_bound(a+1, a+lung_a+1, val);
a[up-a] = val;
b[pos] = up-a;
}
}
int main()
{
in >> n;
for(int i=1; i<=n; i++){
in >> sir[i];
}
a[1] = sir[1];
for(int i=1; i<=n; i++){
ceva(i);
}
out << lung_a << '\n';
int lung = lung_a;
scmax[lung] = a[lung];
lung--;
for(int i=n; i; i--){
if(b[i] == lung){
if(sir[i] < scmax[lung+1]){
scmax[lung] = sir[i];
lung--;
}
}
}
for(int i=1; i<=lung_a; i++){
out << scmax[i] << ' ';
}
return 0;
}