Pagini recente » Cod sursa (job #2923609) | Cod sursa (job #1360602) | Cod sursa (job #1360462) | Cod sursa (job #2616687)
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, m, i, j, k;
int a[200005];
int poz[200005], lmax;
int b[200005];
int rez[200005];
int BinarySearch(int x)
{
int left = 1, right = lmax;
while (left <= right)
{
int mid = (left+right)/2;
if (b[mid] < x)
left = mid+1;
else
right = mid-1;
}
return left;
}
int main()
{
f >> n;
for (int i = 1; i <= n; i++)
f >> a[i];
for (int i = 1; i <= n; i++)
{
int p = BinarySearch(a[i]);
if (p > lmax)
{
lmax++;
}
poz[i] = p;
b[p] = a[i];
}
g << lmax << '\n';
j = n;
k = lmax;
for (; j >= 1 && k >= 1; j--)
{
if (poz[j] == k && (k == lmax || (k < lmax && rez[k+1] > a[j])))
{
rez[k] = a[j];
k--;
}
}
for (int i = 1; i <= lmax; i++)
g << rez[i] << ' ';
return 0;
}