Cod sursa(job #2479682)

Utilizator cyg_contnr1Rares Burghelea cyg_contnr1 Data 24 octombrie 2019 11:03:06
Problema Subsir crescator maximal Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define ll long long
#define codechef FAST int t;cin>>t;while(t--)
const int MAX=1000000;
using namespace std;
int v[MAX+5],d[MAX+5],cnt,p[MAX+5],vect[MAX+5],n,lung[MAX+5],maxim=0,k=-1,maxx=1,sol;
void cautare_binara(int target)
{
    int l, r, mid;
    l=0;
    r=maxx;
    sol=0;
    while(l<=r)
    {
        mid=(l+r)/2;
        if(lung[mid]<target)
        {
             sol = mid;
             l=mid+1;
        }
        else
            r=mid-1;
    }
    maxx=max(maxx, sol+1);
}
int main()
{
    FAST
    ifstream in("scmax.in");
    ofstream out("scmax.out");
    in>>n;
    int prev=0;
    for(int i=1;i<=n;++i)
    {
        in>>v[i];
    }
    d[1]=1;
    lung[1]=v[1];
    maxx=1;
    sort(v+1,v+n+1);
    for(int i=2;i<=n;++i)
    {
        cautare_binara(v[i]);
        d[i]=sol+1;
        lung[sol+1]=v[i];
    }
    out<<maxx<<"\n";
    k = maxx;
    for(int i=n;i>=1;i--){
        if(d[i]==k)
            vect[k]=v[i];
        --k;
    }
    for(int i=1;i<=maxx;++i)
        out<<lung[i]<<" ";
    return 0;
}