Pagini recente » Cod sursa (job #2869361) | Cod sursa (job #2587819) | Cod sursa (job #2976353) | Cod sursa (job #3199293)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int OO = (1 << 31) - 1;
int v[100003], d[100003], p[100003];
int main()
{
int n;
fin >> n;
for(int i=1; i<=n; i++){
fin >> v[i];
d[i] = OO;
}
//d[i] = ultimul element al unui subsir cu i elemente
int lng = -1;
for(int i=1; i<=n; i++){
auto it = lower_bound(d + 1, d + n + 1, v[i]);
if(v[i] < *it){
*it = v[i];
p[i] = it - d;
if(it - d > lng){
lng = it - d;
}
}
}
fout << lng << '\n';
stack<int> s;
int k = lng;
for(int i=n; i>=0 && k>0; i--){
if(p[i] == k){
s.push(v[i]);
k --;
}
}
while(!s.empty()){
fout << s.top() << ' ';
s.pop();
}
fout << '\n';
return 0;
}