Pagini recente » Cod sursa (job #3253459) | Cod sursa (job #2925941) | Cod sursa (job #10003) | Cod sursa (job #2485003) | Cod sursa (job #2224760)
#include <bits/stdc++.h>
using namespace std;
int binSearch(const vector<pair<int,int>>& v, int key){
int l = 0, r = (int)v.size() - 1;
int found = -1;
while (l <= r){
int m = (l + r) / 2;
if (v[m].first < key){
found = m;
r = m - 1;
}
else{
l = m + 1;
}
}
return found;
}
int main() {
// ifstream cin("data.txt");
ifstream cin("scmax.in");
ofstream cout("scmax.out");
ios_base::sync_with_stdio(false);
int N;
cin >> N;
vector<int> A(N);
for (int &x: A)
cin >> x;
vector<pair<int,int>> scmax;
vector<int> prev(N, -1);
vector<int> cnt(N, 0);
for (int i = 0; i < N; i++){
int p = binSearch(scmax, A[i]);
if (p == -1){
scmax.emplace_back(A[i], i);
cnt[i] = 1;
}
else{
prev[i] = scmax[p].second;
cnt[i] = cnt[scmax[p].second] + 1;
scmax[p].first = A[i];
scmax[p].second = i;
}
}
auto p = max_element(cnt.begin(), cnt.end()) - cnt.begin();
cout << cnt[p] << endl;
vector<int> s;
int e = p;
while (e != -1){
s.push_back(A[e]);
e = prev[e];
}
reverse(s.begin(), s.end());
for (int x: s)
cout << x << " ";
cout << endl;
return 0;
}