Pagini recente » Cod sursa (job #869527) | Cod sursa (job #1743992) | Cod sursa (job #1136843) | Cod sursa (job #489534) | Cod sursa (job #1815174)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int dim = 100100;
int n, poz, l, a[dim], v[dim], p[dim], h[dim];
int BS(int x);
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
{
fin >> a[i];
poz = BS(a[i]);
if ( poz > l )
l++;
v[poz] = a[i];
p[i] = poz;
}
fout << l << '\n';
poz = l;
for (int i = n; i; i--)
if ( p[i] == poz )
{
h[poz] = a[i];
poz--;
}
for (int i = 1; i <= l; i++)
fout << h[i] << ' ';
fin.close();
fout.close();
return 0;
}
int BS(int x)
{
int left = 1, right = l, mid, sol = l + 1;
while ( left <= right )
{
mid = (left + right) / 2;
if ( x <= v[mid] )
{
sol = mid;
right = mid - 1;
}
else
left = mid + 1;
}
return sol;
}