Pagini recente » Cod sursa (job #178940) | Cod sursa (job #1671490) | Cod sursa (job #1937805) | Cod sursa (job #1136161) | Cod sursa (job #2174740)
#include <bits/stdc++.h>
using namespace std;
int n, val[100005], scmax[100005], poz[100005], ls, ld, mij, rsp, ma, x;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
stack < int > st;
int main ()
{
f>>n;
for ( int i = 1; i <= n ; i++ )
{
f>>val[i];
}
scmax[1] = val[1];
poz[1] = 1;
ma = 1;
for ( int i = 2 ; i <= n ; i++ )
{
x = val[i];
ls = 1;
ld = ma;
rsp = 0;
while ( ls <= ld )
{
mij = (ls+ld) / 2;
if ( scmax[mij] < x )
{
rsp = mij;
ls = mij + 1;
}
else
{
ld = mij - 1;
}
}
if ( rsp == ma )
{
ma++;
}
scmax[rsp+1] = x;
poz[i] = rsp + 1;
}
g<<ma<<'\n';
for ( int i = n ; i >= 1; i-- )
{
if ( poz[i] == ma )
{
ma--;
st.push(val[i]);
}
}
while ( !st.empty() )
{
g<<st.top()<<" ";
st.pop();
}
return 0;
}