Pagini recente » Cod sursa (job #2745033) | Cod sursa (job #99698) | Cod sursa (job #350522)
Cod sursa(job #350522)
/*
* File: main.cpp
* Author: speedemon
*
* Created on September 19, 2009, 6:06 PM
*/
#include <vector>
#include <fstream>
#include <cstdlib>
#include <iterator>
#include <algorithm>
#define InFile "scmax.in"
#define OutFile "scmax.out"
/*
*
*/
using namespace std;
ifstream in;
ofstream out;
vector<unsigned> v,b,p;
int main()
{unsigned N,x,i,st,dr,m;
in.open(InFile);
in>>N;
while( N-- )
{
in>>x;
v.push_back(x);
}
b.push_back(0);
for( N=v.size(),i=1; i < N; ++i )
{
if( v[b.back()] < v[i] )
{
p.push_back(b.back());
b.push_back(i);
continue;
}
st=0; dr=b.size()-1;
while( dr > st )
{
m=st+(dr-st)/2;
if( v[i] < v[b[m]] ) dr=m-1;
else st=m+1;
}
if( v[i] < v[b[st]] )
{
if( st > 0 ) p.push_back(b[st-1]);
b[st]=1;
}
}
out.open(OutFile);
for( st=b.size(), dr=b.back(); st--; dr=p[dr] ) b[st]=v[dr];
out<<b.size()<<'\n';
sort( b.begin(), b.end() );
copy( b.begin(), b.end(), ostream_iterator<unsigned>(out," ") );
return EXIT_SUCCESS;
}