Pagini recente » Cod sursa (job #1440788) | Cod sursa (job #1598193) | Cod sursa (job #2672367) | Cod sursa (job #85277) | Cod sursa (job #1005733)
#include <fstream>
#include <algorithm>
#define N 100010
int data[N], best[N], pred[N], res[N], n;
bool comp(int a, int b) { return data[a] < data[b]; }
int main()
{
std::ifstream in("scmax.in");
in >> n;
for (int i = 1; i <= n; i++)
in >> data[i];
in.close();
int top = best[1] = 1;
pred[1] = 0;
for (int i = 2; i <= n; i++)
{
int *p = std::lower_bound(best + 1, best + top + 1, i, comp);
pred[i] = best[p - best - 1];
*p = i;
if (p == best + top + 1)
top++;
}
int k = best[top];
n = 0;
while (k)
{
res[n++] = data[k];
k = pred[k];
}
std::ofstream out("scmax.out");
out << top << "\n";
while (n--)
out << res[n] << " ";
out << "\n";
out.close();
}