Cod sursa(job #2017461)

Utilizator andreea4aAndreea Knopf andreea4a Data 1 septembrie 2017 13:04:07
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<stdio.h>
using namespace std;
int v[100005],d[100005],poz[100005];
int main(){
    int i,n,l1,l2,mij,nr,p,cnr;
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    d[1]=v[1];
    poz[1]=1;
    nr=1;
    for(i=2;i<=n;i++){
        if(v[i]>d[nr]){
            nr++;
            d[nr]=v[i];
            poz[i]=nr;
        }
        else{
            l1=1;
            l2=nr;
            while(l1<=l2){
                mij=(l1+l2)/2;
                if(d[mij]>v[i]){
                    p=mij;
                    l2=mij-2;
                }
                else
                    l1=mij+1;
                d[p]=v[i];
                poz[i]=p;
            }
        }
    }
    cnr=nr;
    for(i=n;i>=1;i--)
        if(poz[i]==nr&&nr>0){
            d[nr]=v[i];
            nr--;
        }
    printf("%d\n",cnr);
    for(i=1;i<=cnr;i++)
        printf("%d ",d[i]);
    return 0;
}