Pagini recente » Cod sursa (job #324923) | Cod sursa (job #23415) | Cod sursa (job #1716927) | Cod sursa (job #2561722) | Cod sursa (job #2216793)
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int N, Nq, Npoz, s, last, startPoz, a[100003], q[100003], sol[100003], poz[100003];
void put(int x, int i) {
int st = 1, dr = Nq;
while(st <= dr) {
int mij = (st + dr) / 2;
if(x <= q[mij])
dr = mij - 1;
else
st = mij + 1;
}
q[st] = x;
poz[++Npoz] = st;
if(Nq < st) {
Nq = st;
sol[(s = 1)] = last = x;
startPoz = i;
}
}
int main() {
f >> N;
for(int i = 1; i <= N; i++) {
f >> a[i];
put(a[i], i);
}
g << Nq << "\n";
Nq--;
for(int i = startPoz; i >= 1 && Nq >= 1; i--) {
if(Nq == poz[i] && last > a[i]) {
sol[++s] = last = a[i];
Nq--;
}
}
for(int i = s; i >= 1; i--)
g << sol[i] << " ";
g << "\n";
return 0;
}