Pagini recente » Cod sursa (job #2889341) | Cod sursa (job #1767303) | Cod sursa (job #2983264) | Cod sursa (job #796788) | Cod sursa (job #2758807)
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
void write(ofstream& cout, int len, const vector<int>& prev, const vector<int>& idx, const vector<int>& A){
if(prev[idx[len]] != -1)
write(cout, len - 1, prev, idx, A);
cout << A[idx[len]] << " ";
}
int main()
{
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int N;
vector<int> A, prev, idx;
cin >> N;
for(int i = 0, x; i < N; ++i){
cin >> x;
A.push_back(x);
prev.push_back(-1);
idx.push_back(-1);
}
idx.push_back(-1);
int max_len = 0;
for(int i = 0; i < N; ++i){
int low = 1, high = max_len, mid;
while(low <= high){
mid = (low + high) / 2;
if(A[idx[mid]] < A[i])
low = mid + 1;
else high = mid - 1;
}
prev[i] = idx[low - 1];
idx[low] = i;
max_len = max(max_len, low);
}
cout << max_len << "\n";
write(cout, max_len, prev, idx, A);
cin.close();
cout.close();
return 0;
}