Pagini recente » Cod sursa (job #2107606) | Cod sursa (job #1807750) | Cod sursa (job #2378901) | Cod sursa (job #1069901) | Cod sursa (job #1549127)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream o("scmax.out");
const int nmx = 100002;
int n,v[nmx],sol[nmx],l[nmx];
void citire() {
f >> n;
for(int i = 1; i <= n; ++i)
f >> v[i];
}
void afish(int pos, int k){
if(not pos)
return;
if(l[pos] == k){
afish(pos-1,k-1);
o << v[pos] << " ";
}
else
afish(pos-1,k);
}
void dinamica() {
int k = 0;
for(int i = 1; i <= n; ++i) {
if(v[i] > sol[k]) {
sol[++k] = v[i];
l[i] = k;
} else {
int st = 1, dr = k, m, pos = k;
while(st <= dr) {
m = st + (dr - st) / 2;
if(v[i] > sol[m])
st = m + 1;
else {
dr = m - 1;
pos = m;
}
}
sol[m] = v[i];
l[i] = m;
}
}
o << k << "\n";
afish(n,k);
}
int main() {
citire();
dinamica();
return 0;
}