Pagini recente » Cod sursa (job #1394197) | Cod sursa (job #972010) | Cod sursa (job #2061368) | Clasament Teme ACM Unibuc 2013 | Cod sursa (job #1268351)
#include<cstdio>
#include<cstdlib>
#define mare 1<<31-1;
using namespace std;
typedef int vector[100010];
vector v,p,q;
int *s;
int n,nq;
void citire(){
freopen("scmax.in","rt",stdin);
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&v[i]);
}
int ins_bin(int k,int x,int y){
int mij=(x+y)/2;
if(x==y){
if(y>nq)
q[++nq+1]=mare;
q[x]=k;
return x;
}
else
if(k<q[mij])
return ins_bin(k,x,mij);
else
return ins_bin(k,mij+1,y);
}
void creare_pq(){
nq=0;
q[1]=mare;
for(int i=1;i<=n;++i)
p[i]=ins_bin(v[i],1,nq+1);
}
void caut_sol(){
int i,k=n;
s=(int*)calloc(nq,sizeof(int));
for(i=nq;i;--i){
while(p[k]!=i) --k;
*(s+i)=v[k];
}
}
void scriu_sol(){
freopen("scmax.out","wt",stdout);
printf("%d\n",nq);
for(int i=1;i<=nq;++i)
printf("%d\n",*(s+i));
}
int main(){
citire();
creare_pq();
caut_sol();
scriu_sol();
return 0;
}