Pagini recente » Cod sursa (job #1731803) | Cod sursa (job #1272659) | Cod sursa (job #1221186) | Cod sursa (job #1486681) | Cod sursa (job #869610)
Cod sursa(job #869610)
# include <fstream>
using namespace std;
typedef int Vector[100003];
Vector v,e,poz,rez;
int N,lung; // Lungimea vectorului e
const int infinit = (1<<31);
void Citeste()
{
ifstream in("scmax.in");
int i;
in >> N;
for( i = 1 ; i <= N ; ++i )
in >> v[i];
in.close();
}
int Cauta( int x,int inf,int sup)
{
int mij=(inf+sup)/2;
if( inf == sup )
{
if( sup > lung ) e[++lung+1] = infinit;
e[inf] = x;
return inf;
}
else if( x <= e[mij] ) return Cauta(x,inf,mij);
else return Cauta(x,mij+1,sup);
}
void Cp(void)
{
int i;
lung = 0; e[1] = 1;
for( i = 1 ; i <= N ; ++i )
poz[i] = Cauta(v[i],1,lung+1);
}
void Cs()
{
int k=N,i;
for( i = lung ; i ; --i ){
while( poz[k] != i ) --k;
rez[i] = v[k];
}
}
void Tipar()
{
ofstream out("scmax.out");
int i;
out << lung << '\n';
for( i = 1 ; i <= lung ; ++i )
out << rez[i] << ' ';
out.close();
}
main()
{
Citeste();
Cp();
Cs();
Tipar();
}