Pagini recente » Rating Oso Agent (osoagent) | Istoria paginii runda/judet9-1 | Cod sursa (job #2530696) | Cod sursa (job #2886824) | Cod sursa (job #2523763)
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
#define MAXN 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
struct el {
int val;
long poz;
};
el v[MAXN + 5];
int aib[MAXN + 5];
int N;
vector<long> sir;
bool comp(el a, el b) {
if (a.val == b.val) {
return a.poz > b.poz;
}
return a.val < b.val;
}
void read() {
fin >> N;
for (int i = 1; i <= N; ++i) {
fin >> v[i].val;
v[i].poz = i;
}
}
void update(int poz, int val) {
for (int i = poz; i <= MAXN; i += i & -i) {
aib[i] = max(aib[i], val);
}
}
int query(int poz) {
int maxi = 0;
for (int i = poz; i > 0; i -= i & -i) {
maxi = max(maxi, aib[i]);
}
return maxi;
}
int main()
{
read();
sort(v + 1, v + N + 1, comp);
for (int i = 1; i <= N; ++i) {
int q = query(v[i].poz - 1);
if (q + 1 > query(MAXN)) {
sir.push_back(v[i].val);
}
update(v[i].poz, q + 1);
}
fout << query(MAXN) << "\n";
for (int i = 0; i < sir.size(); ++i) {
fout << sir[i] << " ";
}
return 0;
}