Pagini recente » Cod sursa (job #117795) | Cod sursa (job #2021074) | Cod sursa (job #2014692) | Cod sursa (job #236474) | Cod sursa (job #1974989)
#include<fstream>
using namespace std;
ifstream in ("scmax.in" );
ofstream out("scmax.out");
int n,i,k,w[100001],v[100001],len[100001],st,dr,mid,d,r[100001],maxim;
int main(){
in >> n;
for( i = 1; i <= n; i ++ ){
in >> v[i];
}
for( i = 1; i <= n; i ++ ){
if( v[i] > w[k]){
k ++;
w[k] = v[i];
len[i] = k;
}
else{
for( st = 1, dr = k; st <= dr; ){
mid = ( st + dr ) / 2;
if( w[mid] < v[i] ){
st = mid + 1;
}
else{
dr = mid - 1;
}
}
w[st] = v[i];
len[i] = st ;
}
}
for( i = 1; i <= n; i ++ ){
if( maxim < len[i] ){
maxim = len[i];
}
}
out<<maxim<<"\n";
for( i = n; i >= 1; i -- ){
if( len[i] == maxim ){
maxim --;
d++;
r[d] = v[i];
}
}
for( i = d; i >= 1; i -- ){
out << r[i]<<" ";
}
return 0;
}