Pagini recente » Cod sursa (job #521038) | Cod sursa (job #2226275) | Cod sursa (job #1357903) | Cod sursa (job #1511173) | Cod sursa (job #807476)
Cod sursa(job #807476)
#include <fstream>
using namespace std;
#define LMax 100010
int v[LMax],s[LMax],L[LMax],sol[LMax],n,i,j,k,poz,p,maxi;
ifstream f("scmax.in");
ofstream g("scmax.out");
int caut_bin(int x){
int mij,st,dr;
st=1;dr=k;
while(st<=dr){
mij=(st+dr)/2;
if(s[mij-1]<x&&s[mij]>=x)return mij;
else
if(s[mij]>x)dr=mij-1;
else st=mij+1;
}
return 0;
}
int main(){
f>>n;
for(i=1;i<=n;i++)f>>v[i];
s[1]=v[1];
L[1]=1;
k=1;
for(i=2;i<=n;i++){
poz=caut_bin(v[i]);
if(poz==0){ s[++k]=v[i];L[i]=k;}
else {s[poz]=v[i];L[i]=poz;}
}
for(i=1;i<=n;i++)
if(L[i]>maxi){ maxi=L[i];p=i; }
k=0;
g<<maxi<<'\n';
while(maxi){
if(L[p]==maxi) { sol[++k]=v[p]; maxi--;}
p--;
}
for(i=k;i>0;i--) g<<sol[i]<<" ";
g<<'\n';
f.close();g.close();
return 0;
}