Pagini recente » Cod sursa (job #1556893) | Cod sursa (job #2187314) | Cod sursa (job #1565636) | Cod sursa (job #1888755) | Cod sursa (job #2719375)
#include <bits/stdc++.h>
#define oo 0x3f3f3f3f
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, a[100005], d[100005], t[100005], l, r, pos, len, m;
void Read()
{
f>>n;
for(int i = 1;i <= n;++i)
f>>a[i];
}
void recon(int x)
{
if(t[x])
recon(t[x]);
g<<a[x]<<" ";
}
void Solve()
{
len = d[1] = 1;
for(int i = 2;i <= n;++i)
{
l = 1, r = len;
while(l <= r)
{
m = (l + r) >> 1;
if(a[d[m]] >= a[i])
r = m - 1;
else
l = m + 1;
}
if(l > len)
{
++len;
d[len] = i;
t[d[len]] = d[len - 1];
}
else
{
d[l] = i;
t[d[l]] = d[l - 1];
}
}
g<<len<<'\n';
recon(d[len]);
}
int main()
{
Read();
Solve();
return 0;
}