Pagini recente » Cod sursa (job #3228596) | Cod sursa (job #2911028) | Cod sursa (job #2554258) | Cod sursa (job #3240437) | Cod sursa (job #950201)
Cod sursa(job #950201)
#include<cstdio>
using namespace std;
int i, n, a[100001], s[100001], v[100001], mij, st, dr, poz, sol[100001];
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d", &n); scanf("%d", &a[1]); s[1]=1; v[1]=a[1]; v[0]=1;
for (i=2;i<=n;i++) {
scanf("%d", &a[i]);
st=1; dr=v[0];
while (st<dr) {
mij=(st+dr)/2;
if (v[mij]<=s[i]) dr=mij-1; else st=mij+1;
}
if (v[st]>=a[i]) {v[st]=a[i]; s[i]=st; if (st==v[0]) poz=i;}
else {v[st+1]=a[i]; s[i]=st+1; if (st+1>v[0]) v[0]=st+1; poz=i;}
}
printf("%d\n", v[0]); sol[1]=a[poz]; sol[0]=1; v[0]--;
for (i=poz-1;i>=1;i--) if (s[i]==v[0]) {sol[++sol[0]]=a[i]; v[0]--;}
printf("%d", sol[sol[0]]);
for (i=sol[0]-1;i>=1;i--) printf(" %d", sol[i]);
printf("\n"); return 0;
}