Pagini recente » Cod sursa (job #2309709) | Cod sursa (job #894757) | Cod sursa (job #938680) | Cod sursa (job #865585) | Cod sursa (job #2035967)
#include <fstream>
#define MAXN 100002
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int dp[MAXN], st, dr, mij, n, v[MAXN], nn, poz;
inline int caut_binar(int val) {
st = 1; dr = nn;
while (st <= dr) {
mij = (st + dr) / 2;
if (v[dp[mij]] > val) {
dr = mij - 1;
}
else
st = mij + 1;
}
return dr;
}
inline void Read() {
fin >> n; fin >> v[1]; dp[1] = 1; nn = 1;
for (int i = 2; i <= n; i++) {
fin >> v[i];
poz = caut_binar(v[i]);
if (poz == nn) {
if (v[dp[nn]] < v[i])
dp[++nn] = i;
}
else if (v[dp[poz + 1]] > v[i])
dp[poz + 1] = i;
}
fout << nn << "\n";
for (int i = 1; i <= nn; i++)
fout << v[dp[i]] << " ";
}
int main () {
Read();
fin.close(); fout.close(); return 0;
}