Pagini recente » Cod sursa (job #154307) | Cod sursa (job #2452677) | Cod sursa (job #2042900) | Istoria paginii runda/wintership/clasament | Cod sursa (job #1611522)
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <fstream>
using namespace std;
int main(){
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
f >> n;
vector<int> v(n);
for(int i = 0; i < n; ++i){
f >> v[i];
}
vector<int> len(n), best(n+1, 0);
int poz_last = -1, max_len = 0;
for(int i = 0; i < n; ++i){
vector<int>::iterator cur = lower_bound(best.begin(), best.begin()+max_len+1, v[i]);
len[i] = distance(best.begin(), cur);
*cur = v[i];
if(len[i] > max_len){
max_len = len[i];
poz_last = i;
}
}
vector<int> rez(max_len);
rez.back() = v[poz_last];
for(int i = poz_last-1, len_caut = max_len-1; len_caut > 0; --i){
if(len[i] == len_caut){
--len_caut;
rez[len_caut] = v[i];
}
}
g << rez.size() << '\n';
for(int i = 0; i < max_len; ++i){
g << rez[i] << " ";
}
}