Pagini recente » Cod sursa (job #846164) | Cod sursa (job #55015) | Cod sursa (job #3004252) | Cod sursa (job #3033297) | Cod sursa (job #2562086)
#include <bits/stdc++.h>
using namespace std;
ifstream fin( "subsir2.in" );
ofstream fout( "subsir2.out" );
const int NMAX = 5005;
int N;
int a[NMAX];
int lis[NMAX], last;
int lisp[NMAX];
void Read()
{
fin >> N;
for( int i = 1; i <= N; ++i )
fin >> a[i];
}
int BinSearch( int lf, int rg, int val ) {
if( lf > rg ) return -1;
int mid = lf + ( rg - lf ) / 2;
if( lis[mid] <= val ) return max( mid, BinSearch( mid + 1, rg, val ) );
else return BinSearch( lf, mid - 1, val );
}
void Do()
{
lis[++last] = a[1];
lisp[1] = 1;
for( int i = 2; i <= N; ++i ) {
if( a[i] < lis[1] ) { lis[1] = a[i]; lisp[1] = i; }
else {
int p = BinSearch( 1, last, a[i] );
lis[p + 1] = a[i];
lisp[p + 1] = i;
if( p + 1 > last ) last++;
}
}
/*for( int i = 1; i <= last; ++i )
fout << lis[i] << ' '; fout << '\n';*/
fout << last << '\n';
for( int i = 1; i <= last; ++i )
fout << lisp[i] << ' ';
}
int main()
{
Read();
Do();
return 0;
}