Pagini recente » Cod sursa (job #2883590) | Cod sursa (job #85813) | Cod sursa (job #1158823) | Cod sursa (job #831979) | Cod sursa (job #2587926)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout("scmax.out");
#define cin fin
#define cout fout
#define Nmax 1010
int n;
int a[Nmax], dp[Nmax], poz[Nmax], sol[Nmax];
void read() {
cin >> n;
for(int i=1; i<=n; i++) {
cin >> a[i];
}
}
int cb(int st, int dr, int val) {
int mijl, pivot;
while(st <= dr) {
mijl = (st + dr) / 2;
if(dp[mijl] < val) {
st = mijl + 1;
} else {
pivot = mijl;
dr = mijl - 1;
}
}
return pivot;
}
void solve() {
int k = 1;
dp[1] = a[1];
poz[1] = 1;
for(int i=2; i <= n; i++) {
if(a[i] > dp[k]) {
k++;
dp[k] = a[i];
poz[i] = k;
} else {
int pivot = cb(1, k, a[i]);
dp[pivot] = a[i];
poz[i] = pivot;
}
}
cout << k << endl;
for(int i=n; i && k; i--) {
if(poz[i] == k) {
sol[k--] = a[i];
}
}
while(sol[++k]) {
cout << sol[k] << " ";
}
}
int main() {
read();
solve();
}