Pagini recente » Cod sursa (job #160434) | Cod sursa (job #2599154) | Cod sursa (job #2570071) | Cod sursa (job #2319029) | Cod sursa (job #2180756)
#include <bits/stdc++.h>
#define MAX 101000
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[MAX], poz[MAX], a[MAX], s[MAX];
long long int n, dr, st, mijloc, sol;
int lg, lg1;
int main()
{int i, j;
fin>>n;
for(i=1;i<=n;i++)
fin>>a[i];
v[1]=a[1];
poz[1]=1;
lg=1;
for(i=2;i<=n;i++){
sol=0;
st=0;
dr=lg+1;
while(dr-st>1){
mijloc=(dr+st)/2;
if(v[mijloc]>=a[i]) {sol=mijloc; dr=mijloc;}
else st=mijloc;
}
if(sol){
v[sol]=a[i];
poz[i]=sol;
}
else{
lg++;
v[lg]=a[i];
poz[i]=lg;
}
}
/* for(i=n;i>=1;i--)
if(poz[i]==lg){
s[lg]=v[]
}*/
fout<<lg<<'\n';
lg1=lg;
for(i=n, j=1;i>=1; i--){
if(poz[i]==lg1) {s[j]=a[i]; j++; lg1--;}
}
sort(s+1, s+lg+1);
for(i=1;i<=lg;i++)
fout<<s[i]<<' ';
return 0;
}