Pagini recente » Cod sursa (job #1276309) | Cod sursa (job #2634565) | Cod sursa (job #2835700) | Cod sursa (job #95806) | Cod sursa (job #2210245)
#include<bits/stdc++.h>
#define ll long long
#define sz size
#define pb push_back
#define er erase
#define in insert
#define fr first
#define sc second
#define mp make_pair
#define pi pair
#define _ ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
#define rc(s) return cout<<s,0
using namespace std;
int n,x,par[100005];
map<int,int>pop;
vector<int>ans;
int binsearch(int l,int r,int y){
int mid;
while(l<=r){
mid=l+(r-l)/2;
if(ans[mid]<y) l=mid+1;
else r=mid-1;
}
mid=l+(r-l)/2;
if(ans[mid]>=y) mid--;
return mid;
}
void afis(int y,int z){
z--;
if(z>=1) afis(pop[y],z);
cout<<y<<' ';
}
signed main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
cin >> n;
cin >> x;
n--;
ans.pb(x);
pop[x]=0;
while(n--){
cin >> x;
if(!ans.size()){ ans.push_back(x); continue;}
if(x>ans[ans.size()-1]){ pop[x]=ans[ans.size()-1]; ans.pb(x); continue;}
int ho=binsearch(0,ans.size()-1,x);
ans[ho+1]=x;
pop[x]=ans[ho];
}
cout<<ans.size()<<endl;
afis(ans[ans.size()-1],ans.size());
}