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