Pagini recente » Cod sursa (job #1752274) | Cod sursa (job #1707639) | Cod sursa (job #356340) | Cod sursa (job #1339461) | Cod sursa (job #1144882)
#include<fstream>
#define maxn 100005
using namespace std;
ifstream fi("scmax.in");
ofstream fo("scmax.out");
int i,n,a[maxn],lung[maxn],l[maxn];
int s[maxn],poz,nr=1;
int caut(int x){
int p,u,m;
p=0; u=nr; m=(p+u)/2;
while(p<=u)
if(a[l[m]]<x && a[l[m+1]]>=x) return m;
else if(a[l[m+1]]<x){ p=m+1; m=(p+u)/2; }
else { u=m-1; m=(p+u)/2; }
return nr;
}
int main(){
fi>>n;
for(i=1;i<=n;i++) fi>>a[i];
lung[1]=1; l[0]=0; l[1]=1;
for(i=2;i<=n;i++){
poz=caut(a[i]);
lung[i]=poz+1;
l[poz+1]=i;
if(nr<poz+1) nr=poz+1;
}
fo<<nr<<"\n";
poz=nr; s[nr+1]=2000000009;
for(i=n;i>0;i--)
if(lung[i]==nr && a[i]<s[nr+1]) s[nr--]=a[i];
nr=poz;
for(i=1;i<=nr;i++) fo<<s[i]<<" ";
fi.close();
fo.close();
return 0;
}