Pagini recente » Cod sursa (job #1397719) | Cod sursa (job #1316371) | Cod sursa (job #2515700) | Cod sursa (job #3169308) | Cod sursa (job #2771460)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
long long v[100005] , x[100005] , ans[100005] , P[100005];
int Mac;
int main()
{
int n;
fin >> n;
for(int i = 1 ; i <= n ; i++)
fin >> v[i];
int k = 1;
x[k] = v[1];
P[1] = k;
for(int i = 2 ; i <= n ; i++)
if(v[i] > x[k])
x[++k] = v[i] , P[i] = k;
else
{
int st = 1 , dr = k , p = k + 1;
while(st <= dr)
{
int m = (st + dr) / 2;
if(x[m] > v[i]) p = m , dr = m - 1;
else st = m + 1;
}
x[p] = v[i];
P[i] = p;
}
int j = n;
for(int i = k ; i >= 1; i--)
{
while(P[j] != i)
j--;
ans[i] = j;
}
fout << k << '\n';
for(int i = 1 ; i <= k ; i++)
fout << v[ans[i]] << " ";
return 0;
}