Pagini recente » Cod sursa (job #1769559) | Cod sursa (job #3137228) | Cod sursa (job #1396614) | Cod sursa (job #1722007) | Cod sursa (job #2203939)
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
#define mx 100050
int A[mx], Q[mx], P[mx], N, len;
int InsertVal(int k, int st, int dr){
int md=(st+dr)/2;
if(st==dr){
if(st>len) Q[++len+1]=mx;
Q[st]=k;
return st;
}
else if(k<=Q[md]) InsertVal(k,st,md);
else InsertVal(k,md+1,dr);
}
void crearePQ(){
len =0;
for(int i=1;i<=N;i++){
P[i]=InsertVal(A[i],1,len+1);
}
}
int afis(){
cout<<len<<endl;
int i=N;
while(len){
if(P[i]==len){
cout<<A[i]<<" ";
len--;
}
i--;
}
}
int main(){
cin>>N;
for(int i=1;i<=N;i++)
cin>>A[i];
crearePQ();
afis();
}