Pagini recente » Cod sursa (job #2776409) | Cod sursa (job #2222339) | Cod sursa (job #1202941) | Cod sursa (job #2896366) | Cod sursa (job #2938018)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int maxn = 1e5;
int n;
int a[maxn + 2];
int dp[maxn + 2];
int pos[maxn + 2];
int b[maxn + 2];
int k;
void read(){
fin >> n;
for(int i = 1; i <= n; ++i) fin >> a[i];
}
void solve(){
dp[++k] = a[1];
pos[1] = 1;
for(int i = 2; i <= n; ++i){
if(a[i] > dp[k]) dp[++k] = a[i], pos[i] = k;
else{
int st = 1, dr = k, p;
while(st <= dr){
int mid = (st + dr) / 2;
if(dp[mid] >= a[i]) p = mid, dr = mid - 1;
else st = mid + 1;
}
dp[p] = a[i];
pos[i] = p;
}
}
fout << k << '\n';
int j = n;
for(int i = k; i >= 1; --i){
while(pos[j] != i)
j--;
b[i] = j;
}
for(int i = 1; i <= k; ++i)
fout << a[b[i]] << " ";
}
int main(){
read();
solve();
return 0;
}
/*
*/