Cod sursa(job #1306335)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 30 decembrie 2014 21:04:09
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 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;
    for (i=1;i<=n;i++) {
            f>>v[i];
    }
    d[1]=1;m=1;
    for (i=2;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++;
        d[sol+1]=i;
        t[i]=d[sol];
        }
    g<<m<<'\n';
    afis(d[m]);
    g<<'\n';
    return 0;
}