Pagini recente » Cod sursa (job #3151107) | Cod sursa (job #2152794) | Cod sursa (job #2252290) | Cod sursa (job #376229) | Cod sursa (job #1922661)
#include <fstream>
#include <stack>
using namespace std;
string pat, txt;
int n, a[100005], dp[100005], i, st, dr, mij, drum[100005], el, nr, poz;
stack <int> stiv;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
int main ()
{
f>>n;
for ( i = 1 ; i <= n ; i++ )
{
f>>a[i];
}
dp[1]=1;
nr=1;
for ( i = 2 ; i <= n ; i++ )
{
el = a[i];
st=1;
dr=nr;
poz=1;
while ( st <= dr )
{
mij = (st+dr) / 2;
if ( a [ dp[ mij ] ] < el )
{
st = mij + 1;
poz = st;
}
else
{
dr = mij - 1;
}
}
dp [ poz ] = i ;
drum[ i ] = dp [ poz - 1 ] ;
nr = max ( nr, poz );
}
g << nr << '\n';
stiv.push( a [ dp [ nr ] ] );
for ( i = drum [ dp [ nr ] ] ; i != 0 ; i = drum [ i ])
{
stiv.push ( a [ i ] );
}
while ( !stiv.empty() )
{
g<<stiv.top()<<" ";
stiv.pop();
}
return 0;
}