Pagini recente » Cod sursa (job #1460309) | Cod sursa (job #1291904) | Cod sursa (job #2814491) | Cod sursa (job #1836402) | Cod sursa (job #2369801)
#include<bits/stdc++.h>
#define MAXN 100001
int sol[MAXN], poz[MAXN], v[MAXN];
int solv[MAXN];
int cautbin(int st, int dr, int x){
int mij, ans;
ans=-1;
while(st<=dr){
mij=(st+dr)/2;
if(sol[mij]>=x){
ans=mij;
dr=mij-1;
}
else
st=mij+1;
}
if(ans==-1)
ans=1;
return ans;
}
int main(){
FILE*fin=fopen("scmax.in", "r");
FILE*fout=fopen("scmax.out", "w");
int i, n, rez, pas, m, p, k;
fscanf(fin, "%d", &n);
for(i=1; i<=n; i++)
fscanf(fin, "%d", &v[i]);
m=0;
for(i=1; i<=n; i++){
if(m==0){
m++;
sol[m]=v[i];
poz[i]=1;
}
else{
if(v[i]>sol[m]){
m++;
sol[m]=v[i];
poz[i]=m;
}
else{
p=cautbin(1, m, v[i]);
// if(v[i]==13)
// printf("x%d %d", p, m);
poz[i]=p;
sol[p]=v[i];
}
}
}
fprintf(fout, "%d\n", m);
i=n;
k=m;
while(m>0 && i>0){
if(poz[i]==m){
solv[m]=v[i];
m--;
}
i--;
}
for(i=1; i<=k; i++)
fprintf(fout, "%d ", solv[i]);
return 0;
}