Pagini recente » Cod sursa (job #2706809) | Cod sursa (job #2265449) | Cod sursa (job #2644332) | Cod sursa (job #211162) | Cod sursa (job #2390384)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, a[100002], M[100002], P[100002];
void afis(int le, int k){
if(le != 0){
afis(le-1, P[k]);
}
fout << a[k]<<" ";
}
void dp(){
int lo, hi, mid, newl , len = 0;
for(int i = 0; i<n; i++){
lo = 1;
hi = len;
while(lo <= hi){
mid = (lo+hi)/2;
if(a[M[mid]] < a[i])
lo = mid+1;
else
hi = mid - 1;
}
newl = lo;
P[i] = M[newl - 1];
M[newl] = i;
if(newl > len){
len = newl;
}
}
int k = M[len];
fout << len<<"\n";
afis(len-1, M[len]);
}
int main(){
fin >> n;
for(int i = 0; i<n; i++){
fin >> a[i];
}
dp();
return 0;
}