Cod sursa(job #2180339)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 20 martie 2018 20:05:57
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n,v[100005],v1[100005],v2[100005];
vector <int> sol;
int caut(int st,int dr,int val)
{
    if(dr-st>=1&&v[st])
    {
        return dr;
    }
    int mij=(st+dr)/2;
    if(v[mij]>val)
        return caut(st,mij,val);
    else
        return caut(mij+1,dr,val);
}
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    int dr=2,valCur;
    scanf("%d",&v[1]);
    for(int i=2;i<=n;i++)
    {
        scanf("%d",&v[i]);
        dr=caut(0,dr,v[i]);
        v1[dr]=v[i];
        v2[i]=dr++;
    }
    int maxi=0,poz;
    for(int i=1;i<=n;i++)
        maxi=max(maxi,v2[i]);

    printf("%d\n",maxi);
    for(int i=n;i>=1;i--)
    {
        if(v2[i]==maxi)
        {
            sol.push_back(i);
            maxi--;
        }
    }
    for(int i=sol.size()-1;i>=1;i--)
        printf("%d ",v[sol[i]]);

    return 0;
}