Pagini recente » Cod sursa (job #3199399) | Cod sursa (job #1952705) | Cod sursa (job #3033309) | Cod sursa (job #1978188) | Cod sursa (job #1194395)
#include<fstream>
using namespace std;
ifstream fi("scmax.in");
ofstream fo("scmax.out");
const int maxn = 100005;
int a[maxn],lung[maxn];
int sol[maxn],c[maxn];
int i,n,x,lmax;
void inserare(int st,int dr){
int mid=(st+dr)/2;
if(st==dr){
c[dr]=a[i];
if(dr>lmax) lmax=dr;
lung[i]=dr;
}
else{
if(a[i]>c[mid]) inserare(mid+1,dr);
else inserare(st,mid);
}
}
int main(){
fi>>n; lmax=0;
for(i=1;i<=n;i++) fi>>a[i];
for(i=1;i<=n;i++) inserare(1,lmax+1);
fo<<lmax<<"\n";
x=lmax;
for(i=n;i>=1;i--)
if(lung[i]==x){
sol[x]=a[i];
x--;
}
for(i=1;i<=lmax;i++) fo<<sol[i]<<" ";
fi.close();
fo.close();
return 0;
}