Pagini recente » Cod sursa (job #27027) | Cod sursa (job #997967) | Cod sursa (job #1751371) | Cod sursa (job #1382482) | Cod sursa (job #2409717)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int DIM = 1e5 + 5;
int D[DIM], arr[DIM], t[DIM], aux[DIM], K, N;
void drum( int x ){
if( t[x] != -1 )
drum( t[x] );
fout << arr[x] << " ";
}
int main(){
fin >> N;
for( int i = 1; i <= N; i++ )
fin >> arr[i];
K = 1;
D[1] = 1;
t[1] = -1;
aux[1] = 1;
aux[0] = -1;
for( int i = 2; i <= N; i++ ){
if( arr[i] > arr[ aux[K] ] ){
D[i] = D[ aux[K] ] + 1;
t[i] = aux[K];
aux[++K] = i;
}else{
int st = 1;
int dr = K;
while( st <= dr ){
int mid = (st + dr) / 2;
if( arr[ aux[mid] ] >= arr[i] )
dr = mid - 1;
else
st = mid + 1;
}
D[i] = D[dr] + 1;
t[i] = aux[dr];
aux[dr + 1] = i;
}
}
fout << K << "\n";
drum( aux[K] );
return 0;
}