Pagini recente » Cod sursa (job #2837890) | Cod sursa (job #1177238) | Cod sursa (job #1121557) | Cod sursa (job #1189259) | Cod sursa (job #2958564)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 1e5+5;
int n, arr[NMAX], dp[NMAX], idx[NMAX], pos[NMAX];
int main()
{
fin >> n;
for(int i = 1; i <= n; ++ i)
fin >> arr[i];
int k = 1;
dp[1] = arr[1];
for(int i = 2; i <= n; ++ i)
{
if(dp[k] < arr[i])
dp[++k] = arr[i], pos[i] = k;
else
{
int st = 1, dr = k, poz = k + 1;
while(st <= dr)
{
int mid = (st + dr) / 2;
if(dp[mid] >= arr[i])
dr = mid -1, poz = mid;
else
st = mid + 1;
}
dp[poz] = arr[i];
pos[i] = poz;
}
}
fout << k << '\n';
int j = n;
for(int i = k; i >= 1; -- i)
{
while(pos[j]!=i)
j--;
idx[i] = j;
}
for(int i = 1; i <= k; ++ i)
fout << arr[idx[i]] << ' ';
}