Pagini recente » Cod sursa (job #1875175) | Cod sursa (job #1098110) | Cod sursa (job #2488500) | Cod sursa (job #719331) | Cod sursa (job #2458874)
#include <bits/stdc++.h>
int n, sol, i, j, k;
int list[100001], minv[100001];
void read();
void solve();
void write();
void add(int val);
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
read();
solve();
write();
fclose(stdin);
fclose(stdout);
return 0;
}
void read(){
scanf("%d", &n);
for(i=1; i<=n; ++i) scanf("%d", &list[i]);
}
void solve(){
minv[1]=1; sol=1;
for(i=2; i<=n; ++i) add(list[i]);
}
void write(){
printf("%d\n", sol);
for(i=1; i<=sol; ++i) printf("%d ", list[minv[i]]);
}
void add(int val){
int l=1, r=sol, m;
if(list[minv[sol]]<val){
minv[++sol]=i;
return;
}
while(l<r){
m=(l+r)/2;
if(list[minv[m]]>=val && val>list[minv[m-1]]) break;
else if(val<=list[minv[m]])r=m-1;
else l=m+1;
}
if(l==r) m=l;
if(list[minv[m]]>list[i]) minv[m]=i;
}