Cod sursa(job #2295995)

Utilizator enedumitruene dumitru enedumitru Data 4 decembrie 2018 02:21:10
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>
#define Nmax 100001
using namespace std;
ifstream f("scmax.in"); ofstream g("scmax.out");
int n,v[Nmax],k,t[Nmax],p[Nmax],pt;
int caut_bin(int x)
{   int st=0,dr=k;
    while(st<=dr)
    {   int m=(st+dr)/2;
        if(v[t[m]]<x && v[t[m+1]]>= x) return m;
            else if(v[t[m+1]]<x) st=m+1; else dr = m-1;
    }
    return k;
}
void afis(int x)
{   if(p[x]) afis(p[x]);
    g<<v[x]<<' ';
}
int main()
{   f>> n;
    for(int i=1;i<=n;i++) f>>v[i];
    t[1]=1;
    k=1;
    pt=1;
    for(int i=2;i<=n;i++)
    {   int poz=caut_bin(v[i]);
        p[i]=t[poz];
        t[poz+1]=i;
        if(poz+1>k) {k=poz+1; pt=i;}
    }
    g<<k<<'\n';
    afis(pt);
    return 0;
}