Pagini recente » Cod sursa (job #2806657) | Cod sursa (job #3151472) | Cod sursa (job #1873550) | Cod sursa (job #1429524) | Cod sursa (job #2173602)
#include <bits/stdc++.h>
using namespace std;
int n,v[100005], dp[100005],pa[100005], i, x, ls, ld, mij, ma, rsp, oo=99999999;
stack < int > st;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
int main ()
{
f>>n;
for ( i = 1; i <= n; i++ )
{
f>>v[i];
}
dp[1] = v[1];
pa[1] = 1;
ma = 1;
for ( i = 2 ; i <= n ; i++ )
{
x = v[i];
ls = 1;
ld = ma;
rsp = 0;
while ( ls <= ld )
{
mij = (ls + ld) / 2;
if ( dp[mij] < x )
{
rsp = mij;
ls = mij + 1;
}
else
{
ld = mij - 1;
}
}
if ( rsp == ma )
{
ma++;
dp[ma] = x;
}
dp[rsp+1] = x;
pa[i] = rsp+1;
}
for ( i = n ; i >= 1 ; i-- )
{
if ( pa[i] == ma )
{
st.push( v[i] );
ma--;
}
if ( ma == 0 )
{
break;
}
}
g<<st.size()<<'\n';
while (!st.empty())
{
g<<st.top()<<" ";
st.pop();
}
}