Pagini recente » Cod sursa (job #2380344) | Cod sursa (job #684137) | Cod sursa (job #259829) | Cod sursa (job #1466288) | Cod sursa (job #2492424)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
long long n;
long long a[NMAX] , pos[NMAX] , ans[NMAX] , aux[NMAX];
long long Binary_Search(long long val , long long &k)
{
if(aux[k] <= val)
{
aux[++k] = val;
return k;
}
long long st = 1 , dr = k , mij = 0 , pos = 0;
while(st <= dr)
{
mij = (dr - st) / 2 + st;
if(aux[mij] >= val)
{
pos = mij;
dr = mij - 1;
}
else st = mij + 1;
}
aux[pos] = val;
return pos;
}
int main()
{
long long i , k = 0;
f >> n;
for(i = 1 ; i <= n ; i++)
{
f >> a[i];
pos[i] = Binary_Search(a[i] , k);
}
long long m = k;
for(i = n ; i >= 1 ; i--)
{
if(pos[i] == m)
{
ans[m--] = a[i];
}
}
g << k << '\n';
for(i = 1 ; i <= k ; i++)
g << ans[i] << ' ';
return 0;
}