Pagini recente » Cod sursa (job #3214040) | Cod sursa (job #1004804) | Cod sursa (job #1663170) | Cod sursa (job #274725) | Cod sursa (job #2874752)
#include <bits/stdc++.h>
using namespace std;
int v[100005];
int poz[100005];
int cb[100005];
int pre[100005];
int n, ts;
int bin_search(int val)
{
int pw = 1;
while(pw <= ts)
pw <<= 1;
int p = 0;
while(pw)
{
if(p + pw <= ts)
{
if(cb[p + pw] < val)
p += pw;
}
pw >>= 1;
}
return p;
}
void solve(int p)
{
if(p == 0)
return;
solve(pre[p]);
cout << v[p] << " ";
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d\n", &n);
for(int i = 1 ; i <= n ; i++)
{
scanf("%d", &v[i]);
}
int mxp = 1;
for(int i = 1 ; i <= n ; i++)
{
int p = bin_search(v[i]);
if(p == ts)
{
cb[++ts] = v[i];
poz[ts] = i;
pre[i] = poz[p];
mxp = i;
}
else
{
pre[i] = poz[p];
if(cb[p + 1] > v[i])
{
cb[p + 1] = v[i];
poz[p + 1] = i;
}
}
}
cout << ts << '\n';
solve(mxp);
cout << '\n';
return 0;
}