Pagini recente » Cod sursa (job #2075927) | Cod sursa (job #2228727) | Cod sursa (job #2655459)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
using VI = vector<int>;
ofstream fout("scmax.out");
int n, k;
VI a, v, t;
void Read();
void Solve();
void Write(int pos);
int main()
{
Read();
Solve();
fout << k << '\n';
Write(v[k]);
}
void Solve()
{
v.emplace_back(-1);
for (int i = 0; i < n; i++)
{
if (!k || a[i] > a[v[k]])
{
t[i] = v[k];
k++;
v[k] = i;
}
else
{
int left = 1, right = k, mid, j;
while (left <= right)
{
mid = (left + right) / 2;
if (a[v[mid]] >= a[i])
{
j = mid;
right = mid - 1;
}
else
left = mid + 1;
}
t[i] = v[j - 1];
v[j] = i;
}
}
}
void Write(int pos)
{
if (pos < 0) return;
Write(t[pos]);
fout << a[pos] << ' ';
}
void Read()
{
ifstream fin("scmax.in");
fin >> n;
a = t = VI(n);
for (int i = 0; i < n; i++)
fin >> a[i];
}