Pagini recente » Cod sursa (job #191809) | Cod sursa (job #946904) | Cod sursa (job #945809) | Cod sursa (job #1027633) | Cod sursa (job #2299925)
#include <fstream>
#define N_MAX 100005
using namespace std;
ifstream in { "scmax.in" };
ofstream out { "scmax.out" };
int N, K;
int a[N_MAX], dp[N_MAX], t[N_MAX];
void print(int c) {
if (c) {
print(t[c]);
out << a[c] << ' ';
}
}
int main(){
in >> N;
for (int i = 1; i <= N; ++i)
in >> a[i];
dp[++K] = 1;
for (int i = 1; i <= N; ++i) {
int stg = 1, drp = K;
while (stg <= drp) {
int mij = (stg + drp) / 2;
if (a[dp[mij]] < a[i])
stg = mij + 1;
else
drp = mij - 1;
}
if (stg > K)
++K;
dp[stg] = i;
t[i] = dp[stg - 1];
}
out << K << '\n';
print(dp[K]);
}