Pagini recente » Cod sursa (job #3245615) | Cod sursa (job #96417) | Cod sursa (job #893221) | Cod sursa (job #1139666) | Cod sursa (job #2878038)
#include <iostream>
#include <fstream>
using namespace std;
int d[100001], p[100001], sol[100001], v[100001], k;
int cautbin(int n)
{
int p = 1, u = k, sol = k + 1;
while(p <= u)
{
int m = (p + u) / 2;
if(d[m] >= n)
{
sol = m;
u = m - 1;
}
else
p = m + 1;
}
return sol;
}
int main()
{
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int A, n;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> A;
if(d[k] < A)
{
d[++k] = A;
p[i] = k;
}
else
{
int poz = cautbin(A);
d[poz] = A;
p[i] = poz;
}
v[i] = A;
}
for(int i = k ; i >= 1 ; i--)
{
while(p[n] != i)
n --;
sol[i] = v[n];
}
cout << k << '\n';
for(int i = 1; i <= k; i++)
cout << sol[i] << ' ';
return 0;
}