Pagini recente » Cod sursa (job #2251536) | Cod sursa (job #1860347) | Cod sursa (job #2043586) | Cod sursa (job #195202) | Cod sursa (job #2170577)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int sirx[100005];
int sir[100005];
int sirxx[100005];
int l;
vector<int> sol;
bool cmp(int x, int y){
if(x <= y){
return true;
}
return false;
}
void add(int x, int nr){
auto y = upper_bound(sir, sir + l, x, cmp);
if(y != sir + l){
int poz = y - sir;
sir[poz] = x;
sirx[nr] = poz;
}
else{
sirx[nr] = l;
sir[l] = x;
l++;
}
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n, x;
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d", &x);
sirxx[i] = x;
add(x, i);
}
printf("%d\n", l);
l--;
int ll = 0;
for(int i = n - 1; i >= 0; i--){
if(sirx[i] == l){
sol.push_back(sirxx[i]);
l--;
ll++;
}
}
for(int i = ll - 1; i >= 0; i--){
printf("%d ", sol[i]);
}
return 0;
}