Pagini recente » Cod sursa (job #406091) | Cod sursa (job #923629) | Cod sursa (job #343743) | Cod sursa (job #633630) | Cod sursa (job #3246232)
#include <fstream>
#include <map>
#include <vector>
int main()
{
std::ifstream in("scmax.in");
int n; in >> n;
std::vector v(n, 0);
for(int i = 0; i < n; i++)
in >> v[i];
in.close();
std::map<int, int> before;
before[v[0]] = -1;
std::vector piles(1, v[0]);
for(int i = 1; i < n; i++)
{
long long index = std::lower_bound(piles.begin(), piles.end(), v[i]) - piles.begin();
before[v[i]] = index == 0 ? -1 : piles[index - 1];
if(index == piles.size())
piles.push_back(v[i]);
else
piles[index] = v[i];
}
std::vector<int> result;
for(int i = piles.back(); i != -1; i = before[i])
result.push_back(i);
std::ofstream out("scmax.out");
out << result.size() << '\n';
for(int i = result.size() - 1; i >= 0; i--)
out << result[i] << ' ';
out.close();
return 0;
}