Pagini recente » Cod sursa (job #3345918) | Cod sursa (job #3328202) | Cod sursa (job #3341609) | Borderou de evaluare (job #3308821) | Cod sursa (job #3323595)
#include <bits/stdc++.h>
#define cin fin
#define cout fout
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int aux[100001], pvector[100001];
int main() {
int n;
cin >> n;
int a[n + 1];
for(int i = 1; i <= n; i ++){
cin >> a[i];
}
int cnt = 1;
aux[1] = a[1];
pvector[1] = 1;
for(int i = 2; i <= n; i ++){
if(a[i] > aux[cnt]){
cnt ++;
aux[cnt] = a[i];
pvector[i] = cnt;
}
else{
int poz = lower_bound(aux + 1, aux + cnt + 1, a[i]) - aux;
aux[poz] = a[i];
pvector[i] = poz;
}
}
cout << cnt << '\n';
int fin[cnt + 1], j = n;
for(int i = cnt; i >= 1; i --){
while(pvector[j] != i){
j --;
}
fin[i] = a[j];
}
for(int i = 1; i <= cnt; i ++)
cout << fin[i] << ' ';
}