Pagini recente » Cod sursa (job #2445193) | Rating Vlad Toma Grosu (vladtoma) | Cod sursa (job #196873) | Cod sursa (job #1576330) | Cod sursa (job #1527567)
#include<fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int t[100005],w[100005],v[100005],p,u,nr,mid,n;
void drum(int x){
if( x != 0){
drum(t[x]);
fout<<v[x]<<" ";
}
}
int main(){
fin >> n;
for( int i = 1; i <= n; i++ ){
fin >> v[i];
}
w[1] = 1;
t[1] = 0;
nr = 1;
for( int i = 2; i <= n; i++ ){
if( v[i] > v[ w[nr] ] ){
nr++;
w[nr] = i;
t[i] = w[nr-1];
}else{
p = 1;
u = nr;
while( p <= u ){
int mid = ( p + u ) / 2;
if( v[i] > v[ w[mid] ] ){
p = mid + 1;
}else{
u = mid - 1;
}
}
if( v[i] > v[ w[u] ] ){
w[p] = i;
t[i] = w[u];
}
}
}
fout << nr <<"\n";
drum(w[nr]);
return 0;
}