Pagini recente » Clasament igorj_9 | Cod sursa (job #2961337) | Cod sursa (job #1743085) | Cod sursa (job #1481630) | Cod sursa (job #2576516)
#include<fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int sol[200010],n,poz[200010],nrmax,v[200010],sol2[200010];
int main () {
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
sol[1]=v[1];
nrmax=1;
poz[1]=1;
for(int i=2;i<=n;i++){
int st=1,dr=nrmax,pozc=-1;
while(st<=dr){
int mij=(st+dr)/2;
if(v[i]>sol[mij])
st=mij+1;
else{
pozc=mij;
dr=mij-1;
}
}
if(pozc==-1){
nrmax++;
sol[nrmax]=v[i];
poz[i]=nrmax;
}
else{
sol[pozc]=v[i];
poz[i]=pozc;
}
}
cout<<nrmax<<endl;
int counter=nrmax,nr=0;
for(int i=n;i>0;i--)
if(poz[i]==counter){
nr++;
sol2[nr]=v[i];
counter--;
}
for(int i=nrmax;i>0;i--)
cout<<sol2[i]<<" ";
return 0;
}