Pagini recente » Cod sursa (job #298617) | Cod sursa (job #2747009) | Cod sursa (job #1123693) | Cod sursa (job #2648880) | Cod sursa (job #1247342)
#include<iostream>
#include<vector>
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int main() {
int n; in >> n;
int max_seq = -1;
int pos_max = 0;
vector<int> seq;
vector<int> best;
vector<int> prev;
seq.push_back(-1);
for(int i = 1; i <= n; ++i) {
int x; in >> x;
seq.push_back(x);
}
best.push_back(1);
prev.push_back(-1);
for(int i = 1; i <= n; ++i) {
vector<int>::iterator low;
low = lower_bound(seq.begin(), seq.begin() + i, seq[i]) - 1;
// cout << "i:" << i << " | low:" << *(low) << " | seq[low]:" << seq[low - seq.begin()] << '\n';
best.push_back(1 + best[low - seq.begin()]);
prev.push_back(low - seq.begin());
if(best[i] > max_seq) {
max_seq = best[i];
pos_max = i;
}
}
/* cout << "----------------\n";
for(int i = 0; i <= n; ++i) {
cout << "i:" << i<< " best[i]:" << best[i]
<< " | prev[i]:" << prev[i] << " | seq[i]:" << seq[i] << '\n';
}*/
out << max_seq << '\n';
vector<int> print_seq;
int print_seq_size = 0;
while(seq[pos_max] != -1) {
print_seq.push_back(seq[pos_max]);
++print_seq_size;
pos_max = prev[pos_max];
}
while(print_seq_size > 0) {
out << print_seq[--print_seq_size] << ' ';
}
out << '\n';
return 0;
}