Pagini recente » Cod sursa (job #2179869) | Cod sursa (job #807150) | Cod sursa (job #1489103) | Cod sursa (job #3250856) | Cod sursa (job #1005730)
#include <fstream>
#include <iostream>
#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();
pred[1] = 0;
best[1] = 1;
int top = 1;
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];
if (p == best + top + 1)
{
*p = i;
top++;
//pred[i] = best[top++];
}
else
{
//pred[i] = pred[*p];
*p = i;
}
}
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();
}