Pagini recente » Cod sursa (job #1081266) | Cod sursa (job #1768806) | Cod sursa (job #1203545) | Cod sursa (job #1825340) | Cod sursa (job #1801258)
#include <bits/stdc++.h>
using namespace std;
int arr[100000], len[100000], pos[100000];
int n;
int best;
int BS(int low, int up, int x){
int mid;
while(low <= up){
mid = (low + up) / 2;
if(x < arr[len[mid]])
low = mid + 1;
else
up = mid - 1;
}
return(low);
}
void solve(){
int length = 0;
for(int i=n;i>0;i--){
pos[i] = 0;
length = BS(1, best, arr[i]);
if(length > best){
pos[i] = len[length - 1];
best = length;
len[length] = i;
} else
if(length <= best){
pos[i] = len[length - 1];
if(arr[i] > arr[len[length]])
len[length] = i;
}
}
}
int main(){
ifstream cin("scmax.in");
ofstream cout("scmax.out");
cin >> n;
for(int i=1;i<=n;i++)
cin >> arr[i];
solve();
cout << best << endl;
for(int i=len[best]; i>0; i=pos[i])
cout << arr[i] << ' ';
return(0);
}