Pagini recente » Cod sursa (job #187527) | Cod sursa (job #1474466) | Cod sursa (job #587566) | Cod sursa (job #497914) | Cod sursa (job #2195943)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
const int N = 100010;
int n, a[N], M[N], bst, k, pr[N];
void afis(int q){
if (pr[q]) afis(pr[q]);
out << a[q] << " ";
}
int main(){
in >> n;
for (int i=1; i<=n; i++) in >> a[i];
for (int i=1; i<=n; i++){
int st = 0, dr = bst;
while (st <= dr){
int mid = (st + dr) >> 1;
if (a[i] > a[M[mid]]) st = mid + 1;
else dr = mid - 1;
}
pr[i] = M[st-1];
M[st] = i;
bst = max(bst, st);
}
out << bst << "\n";
afis(M[bst]);
return 0;
}