Pagini recente » Cod sursa (job #3136884) | Cod sursa (job #446642) | Cod sursa (job #3223323) | Cod sursa (job #1168172) | Cod sursa (job #2735735)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int INF = 0x3f3f3f3f3f3f3f3f;
int n, ans = -1;
int v[100100], best[100100];
int binarySearch(int val)
{
int left = 1, right = n;
while(left < right)
{
int mid = (left + right) / 2;
if(best[mid] < val)
left = mid + 1;
else
right = mid;
}
return right;
}
int main()
{
memset(best, INF, sizeof best);
in >> n;
for(int i = 1; i <= n; i++)
in >> v[i];
for(int i = 1; i <= n; i++)
{
int x = binarySearch(v[i]);
best[x] = v[i];
ans = max(ans, x);
}
out << ans << '\n';
for(int i = 1; i <= ans; i++)
out << best[i] << ' ';
out << '\n';
return 0;
}