Pagini recente » Cod sursa (job #1531209) | Cod sursa (job #515633) | Cod sursa (job #1941706) | Cod sursa (job #1269193) | Cod sursa (job #2758808)
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
void write(ofstream& cout, int len, int index, const vector<int>& prev, const vector<int>& idx, const vector<int>& A){
if(prev[index] != -1)
write(cout, len - 1, prev[index], prev, idx, A);
cout << A[index] << " ";
}
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, idx[max_len], prev, idx, A);
cin.close();
cout.close();
return 0;
}