Cod sursa(job #1306321)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 30 decembrie 2014 20:51:36
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#include <algorithm>
#include <fstream>
#define inf 2000000000
#define nmax 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");

int n,m,sol,v[nmax];
int d[nmax],t[nmax];
int p,u,mid;

void afis(int k)
{if (t[k]>0) afis(t[k]);
g<<v[k]<<' ';
}


int main(){

    int i,j;

    f>>n;
    d[0]=1<<20;v[0]=1<<20;
    for (i=1;i<=n;i++) {
            f>>v[i];
    }

    for (i=1;i<=n;i++) {
        p=1;
        u=m;
        sol=0;
        while (p<=u) {
            mid=(p+u)>>1;
            if (v[i]>v[d[mid]]) {
                sol=mid;
                p=mid+1;
            }
            else {
                u=mid-1;
            }
        }
        if (sol>=m) m++;
        if (v[i]<v[d[1]]) d[1]=i;


        if (mid&&v[mid]<v[d[sol+1]]) {
            d[sol+1]=i;
            t[i]=d[sol];
        }
    }
    g<<m<<'\n';
    afis(d[m]);
    g<<'\n';
    return 0;
}