Pagini recente » Cod sursa (job #2024841) | Statistici Zoltan Czako (UniversitateaTehnica_Zoltan_Czako) | Cod sursa (job #2471832) | Cod sursa (job #1861766) | Cod sursa (job #3191370)
#include <bits/stdc++.h>
using namespace std;
void setIO(string name = "") {
ios::sync_with_stdio(false);
cin.tie(nullptr);
if (!name.empty()) {
string inFileName = name + ".in";
string outFileName = name + ".out";
freopen(inFileName.c_str(), "r", stdin);
freopen(outFileName.c_str(), "w", stdout);
}
}
const int NMAX = 1e5;
int v[NMAX], poz[NMAX], rez[NMAX];
int main(){
setIO("scmax");
int n, i, pp, dr, st, nr;
cin>>n;
for(i = 0;i<n;i++){
cin>>v[i];
}
rez[0] = v[0];
poz[0] = 0;
nr = 0;
for(i = 1;i<n;i++){
st = 0;
dr = nr;
pp = -1;
while(st <= dr){
int mij = (st + dr) / 2;
if(rez[mij] < v[i]){
st = mij + 1;
}else{
pp = mij;
dr = mij - 1;
}
}
if(pp == -1){
nr++;
rez[nr] = v[i];
poz[i] = nr;
}else{
rez[pp] = v[i];
poz[i] = pp;
}
}
cout<<nr + 1<<"\n";
int cnr = nr;
for(i = n - 1;i>=0;i--){
if(poz[i] == nr){
rez[nr] = v[i];
nr--;
}
}
for(i = 0;i<=cnr;i++){
cout<<rez[i]<<" ";
}
cout<<"\n";
return 0;
}