Mai intai trebuie sa te autentifici.
Cod sursa(job #2576515)
| Utilizator | Data | 6 martie 2020 20:06:48 | |
|---|---|---|---|
| Problema | Subsir crescator maximal | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.86 kb |
#include<fstream>
using namespace std;
ifstream cin("scm.in");
ofstream cout("scm.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;
}
