Pagini recente » Cod sursa (job #934821) | Cod sursa (job #3280012) | Cod sursa (job #1850085) | Cod sursa (job #128741) | Cod sursa (job #2989775)
#include <bits/stdc++.h>
#define FOR(WHATEVER) for(int i = 1; i <= WHATEVER; ++ i)
using namespace std;
/// INPUT / OUTPUT
const string problem = "scmax";
ifstream fin(problem + ".in");
ofstream fout(problem + ".out");
/// GLOBAL VARIABLES
const int NMAX = 1e5 + 5, MOD = 1e9 + 7, INF = 1e9;
int n;
int arr[NMAX], dp[NMAX], p[NMAX], idx[NMAX];
/// READING THE INPUT
int main()
{
fin >> n;
for(int i = 1; i <= n; ++ i)
fin >> arr[i];
int k = 1;
dp[k] = arr[k];
for(int i = 1; i <= n; ++ i)
{
if(arr[i] > dp[k])
{
dp[++k] = arr[i];
p[i] = k;
}
else
{
int st = 1, dr = k, poz = k + 1;
while(st <= dr)
{
int mid = (st + dr) / 2;
if(arr[i] <= dp[mid])
poz = mid, dr = mid - 1;
else
st = mid + 1;
}
dp[poz] = arr[i];
p[i] = poz;
}
}
int j = n;
for(int i = k; i >= 1; --i)
{
while(p[j] != i)
j--;
idx[i] = j;
}
fout << k << '\n';
for(int i = 1; i <= k; ++ i)
fout << arr[idx[i]] << ' ';
}