Pagini recente » Cod sursa (job #256040) | Arhiva de probleme | Cod sursa (job #2246874) | Cod sursa (job #3176870) | Cod sursa (job #2391131)
#include <bits/stdc++.h>
using namespace std;
#define N 100005
int n, M[N], k;
int bs(int val){
int st = 1, dr = k;
while (st <= dr){
int mid = (st + dr) >> 1;
if (M[mid] < val) st = mid + 1;
else dr = mid - 1;
}
return st;
}
int main(){
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
cin >> n;
for (int i=1, x; i<=n; i++){
cin >> x;
int idx = bs(x);
if (idx > k) k = idx, M[k] = x;
else M[idx] = min(M[idx], x);
}
cout << k << '\n';
for (int i=1; i<=k; i++) cout << M[i] << ' ';
return 0;
}