Cod sursa(job #2376962)

Utilizator aditzu7Adrian Capraru aditzu7 Data 8 martie 2019 20:20:51
Problema Subsir crescator maximal Scor 55
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <stdio.h>
using namespace std;
int lmax,mmax,v[100005],i,a[100005],n;
int l[100005],ind=1;

int caut (int x){
int mij,p,u;
p=1;
u=n;
while(p<=u){

    mij=(p+u)/2;
    if(x>a[mij]) p=mij+1;
    else u=mij-1;
}
return u;

}
void drum(int k){
int j;
for(j=k;j>=1&&lmax;j--)
if(l[j]==lmax&&a[j]<=a[k]){
    k=j;
    lmax--;
    drum(j);
    printf("%d ",a[j]);

}


}
int main()
{

    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++) {scanf("%d",&v[i]);mmax=max(mmax,v[i]);}
    for(i=1;i<=n;i++) a[i]=mmax+1;
    for(i=1;i<=n;i++){
        int p=caut(v[i]);
        if(v[i]<a[p+1]) a[p+1]=v[i],l[i]=p+1;
        if(p+1>=lmax){lmax=p+1;ind=i;}

    }
    printf("%d\n",lmax);

   // for(i=1;i<=lmax;i++) printf("%d ",a[i]);
   drum(ind);
    return 0;

}