Cod sursa(job #1259745)

Utilizator danstefanDamian Dan Stefan danstefan Data 10 noiembrie 2014 15:31:02
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <cstdio>
using namespace std;
int n,i,k,u,p,m,poz[100010],q[100010],j,pp,po;
long long v[100010],mi,r[100010];
int main(){
    freopen("scmax.in","r",stdin);
    ofstream g ("scmax.out");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%lld",&v[i]);
        k=1;
        q[k]=v[1];
        poz[1]=1;
        for(i=2;i<=n;i++){
            p=1;u=k;
            m=(p+u)/2;
            while(p<u)
            {
                if(q[m]<v[i])p=m+1;
                else if(q[m]>=v[i])u=m-1;
                m=(p+u)/2;
            }
        if(m==0)m++;
        if(q[m]>v[i]){q[m]=v[i];poz[i]=m;}
        else
            if(not(q[m]==v[i])){k++;poz[i]=k;q[k]=v[i];}}
        g<<k<<'\n';
        pp=n;
        for(i=k;i>=1;i--){
                mi=0;
                for(j=pp;j>=1;j--)
        if(poz[j]==i&&mi==0){mi=v[j];pp=j;}
        else
            if(poz[j]==i&&mi>v[j]){mi=v[j];pp=j;}
        po++;r[po]=mi;}
        for(i=po;i>=1;i--)
            g<<r[i]<<" ";
        return 0;}