Pagini recente » Cod sursa (job #650073) | Cod sursa (job #1949468) | Cod sursa (job #722370) | Cod sursa (job #1643573) | Cod sursa (job #2304606)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, i, j, v[100010], d[100010], t[100010], s[100010], st, dr, mid, indice, k;
int main(){
fin>>n;
for(i=1; i<=n+1; i++){
fin>>v[i];
}
k=1;
d[1]=1;
for(i=2; i<=n; i++){
///cautam ultimul nr mai mic decat v[i]
st=1;
dr=k;
while(st<=dr){
mid=(st+dr)/2;
indice=d[mid];
if(v[indice]>=v[i]){
dr=mid-1;
}else{
st=mid+1;
}
}
indice=d[st];
if(st>k){
k++;
d[k]=i;
t[i]=d[st-1];
}else{
d[st]=i;
t[i]=d[st-1];
}
}
fout<<k<<"\n";
n=d[k];
k=0;
while(n!=0){
s[++k]=v[n];
n=t[n];
}
for(i=k; i>0; i--){
fout<<s[i]<<" ";
}
}