Pagini recente » Cod sursa (job #1421919) | Cod sursa (job #1735167) | Cod sursa (job #2699392) | Cod sursa (job #2689106) | Cod sursa (job #2958567)
#include <bits/stdc++.h>
using namespace std;
/// INPUT / OUTPUT
ifstream fin("scmax.in");
ofstream fout("scmax.out");
/// GLOBAL VARIABLES
const int NMAX = 1e5+5;
int n;
int arr[NMAX], dp[NMAX], poz[NMAX], idx[NMAX];
/// SOLUTION
inline void solve()
{
int k = 1;
dp[1] = arr[1];
for(int i = 1; i <= n; ++ i)
{
if(arr[i] > dp[k])
dp[++k] = arr[i], poz[i] = k;
else
{
int st = 1, dr = k, pos = k + 1;
while(st <= dr)
{
int mid = (st + dr) / 2;
if(arr[i] <= dp[mid])
{
pos = mid, dr = mid - 1;
}
else
st = mid + 1;
}
dp[pos] = arr[i];
poz[i] = pos;
}
}
fout << k << '\n';
int j = n;
for(int i = k; i >= 1; -- i)
{
while(poz[j]!=i)
j--;
idx[i] = j;
}
for(int i = 1; i <= k; ++ i)
fout << arr[idx[i]] << ' ';
}
/// READING THE INPUT
int main()
{
fin >> n;
for(int i = 1; i <= n; ++ i)
fin >> arr[i];
solve();
}