Cod sursa(job #2202788)

Utilizator PredaBossPreda Andrei PredaBoss Data 9 mai 2018 21:17:08
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>
#define INF 2000000005
using namespace std;
int n,x;
int capete[100005],poz[100005];
vector<int>ans;
int elem[100005];
int mx;
int binar(int st,int dr,int val)
{
    int raspuns=0;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(capete[mij]<val)
        {
            st=mij+1;
            raspuns=mij;
        }
        else
            dr=mij-1;
    }
    return raspuns;
}
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        capete[i]=INF;
        int mx=0;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&x);
        elem[i]=x;
        int k=binar(0,n,x)+1;
        capete[k]=x;
        if(k>mx)
            mx=k;
        poz[i]=k;
    }
    printf("%d\n",mx);
    int which=mx;
    for(int i=n;i>=1;i--)
    {
        if(poz[i]==which)
        {
            ans.push_back(i);
            which--;
        }
        if(which==0)
            break;
    }
    for(int j=mx-1;j>=0;j--)
      printf("%d ",elem[ans[j]]);
    return 0;
}