Pagini recente » Cod sursa (job #1765123) | Cod sursa (job #1314109) | Cod sursa (job #1911067) | Cod sursa (job #1464919) | Cod sursa (job #2097048)
#include <fstream>
#define limit 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, v[limit], secv[limit], length[limit], lg, lg2;
int main()
{
int i, lt, rt, mid, nr;
f >> n;
for (i = 1; i <= n; i++) f >> v[i];
for (i = 1; i <= n; i++) {
if (v[i] > secv[lg]) {
secv[++lg] = v[i];
length[i] = lg;
}
else {
for (lt = 1, rt = lg, lg2 = lg; lt <= rt;) {
mid = (lt + rt) / 2;
if (secv[mid] < v[i]) lt = mid + 1;
else {
lg2 = mid;
rt = mid - 1;
}
}
secv[lg2] = v[i];
length[i] = lg2;
}
}
g << lg << '\n';
for (i = n, lg2 = 0; i >= 1 && lg >= 1; i--)
if (length[i] == lg) {
secv[++lg2] = v[i];
lg--;
}
for (i = lg2; i >= 1; i--) g << secv[i] << ' ';
f.close();
g.close();
return 0;
}