Pagini recente » Cod sursa (job #1626332) | Cod sursa (job #809235)
Cod sursa(job #809235)
#include <cstdio>
#include <set>
#include <map>
using namespace std;
inline int next_int() {
int d;
scanf("%d", &d);
return d;
}
multiset<pair<int, int> > S;
multiset<pair<int, int> >::iterator it;
map<pair<int, int> , pair<int, int> > P;
void dfs(const pair<int, int> & x) {
if (P.count(x) && P[x].first >= 0) {
dfs(P[x]);
}
printf("%d ", x.first);
}
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n = next_int();
for (int i = 0; i < n; i++) {
int x = next_int();
pair<int, int> p(x, i);
S.insert(p);
it = S.lower_bound(make_pair(x, 0));
if (it == S.begin())
P[p] = make_pair(-1, -1);
else {
--it;
P[p] = *it;
++it;
}
if (++it != S.end())
S.erase(it);
}
printf("%d\n", int(S.size()));
pair<int, int> x = *S.rbegin();
dfs(x);
return 0;
}