Pagini recente » Cod sursa (job #2028826) | Cod sursa (job #333661) | Cod sursa (job #782484) | Cod sursa (job #1815632) | Cod sursa (job #3275439)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 1e5 + 5, INF = 2e9 + 1;
int n, a[NMAX], len, q[NMAX], p[NMAX], k, ans[NMAX];
void inserare(int val)
{
int st = 1, dr = len, poz = len + 1;
while(st <= dr)
{
int mid = (st + dr) / 2;
if(q[mid] >= val)
{
poz = mid;
dr = mid - 1;
}
else
st = mid + 1;
}
if(poz > len)
q[++len] = val;
else
q[poz] = val;
p[++k] = poz;
}
signed main()
{
fin >> n;
q[1] = INF;
len++;
for(int i = 1; i <= n; i++)
{
fin >> a[i];
inserare(a[i]);
}
fout << len << "\n";
for(int i = len; i >= 1; i--)
{
while(p[k] != i)
k--;
ans[i] = a[k];
}
for(int i = 1; i <= len; i++)
fout << ans[i] << " ";
return 0;
}