Pagini recente » Cod sursa (job #1217996) | Cod sursa (job #2348001) | Cod sursa (job #2654404) | Cod sursa (job #2688771) | Cod sursa (job #1794722)
#include <bits/stdc++.h>
#define lli long long int
using namespace std;
int arr[100001],pos[100001],len[100001];
int n,best = 0;
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 >= 1; 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);
}