Pagini recente » Cod sursa (job #1918928) | Cod sursa (job #2640751) | Cod sursa (job #1598779) | Cod sursa (job #207203) | Cod sursa (job #2712071)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int nMax = 100005;
int n;
int v[nMax], l[nMax], p[nMax];
int BinarySearch(int value, int length, int l[])
{
int left = 1, right = length, mid;
while (left <= right)
{
mid = (left + right) / 2;
if (v[l[mid]] > value)
{
right = mid - 1;
}
else if (v[l[mid]] < value)
{
left = mid + 1;
}
else
{
return left;
}
}
return left;
}
void WriteNumbers(int pos)
{
if (pos == 0)
{
return;
}
WriteNumbers(p[pos]);
fout << v[pos] << ' ';
}
int main()
{
int k = 0;
fin >> n;
for (int i = 1; i <= n; i++)
{
fin >> v[i];
int pos = BinarySearch(v[i], k, l);
if (pos > k)
{
l[++k] = i;
}
else
{
l[pos] = i;
}
p[i] = l[pos - 1];
}
fout << k << '\n';
WriteNumbers(l[k]);
fin.close();
fout.close();
return 0;
}