Pagini recente » Cod sursa (job #799643) | Cod sursa (job #2812468) | Cod sursa (job #1477854) | Cod sursa (job #1068817) | Cod sursa (job #3239000)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream in;
ofstream out;
int n, a[100005], pos[100005]; vector<int> v; stack<int> s;
int main()
{
in.open("scmax.in");
out.open("scmax.out");
in >> n;
for (int i = 0; i < n; i++)
{
in >> a[i];
}
v.push_back(a[0]);
pos[0] = 0;
for (int i = 1; i < n; i++)
{
if (v.back() < a[i])
{
pos[i] = v.size();
v.push_back(a[i]);
}
else
{
auto it = lower_bound(v.begin(), v.end(), a[i]);
int p = it - v.begin();
pos[i] = p;
v[p] = a[i];
}
}
out << v.size() << "\n";
int cp = v.size() - 1;
for (int i = n-1; i >= 0; i--)
{
if (pos[i] == cp)
{
s.push(a[i]);
cp--;
}
}
while (s.size())
{
out << s.top() << " ";
s.pop();
}
}