Cod sursa(job #2202783)

Utilizator racheriunicolaechowchow racheriunicolae Data 9 mai 2018 21:14:22
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
int capat[NMAX],vec[NMAX],v[NMAX];
int bs(int s,int e,int val)
{
    int ans=0;
    while(s<= e)
    {
        int mid=(s+e)/2;
        if(capat[mid]<val)
        {
            ans=mid;
            s=mid+1;
        }
        else
        {
            e=mid-1;
        }
    }
    return ans;
}
int n,ma,lung,gata[NMAX];
void gen_sol(int *gata)
{
    for(int i=n;i>=1;i--)
    {
        if(v[i]==ma)gata[++lung]=vec[i],ma--;
    }
}
int i,x,k,poz;
int main()
{
    ifstream fin("scmax.in");
    ofstream fout("scmax.out");
    fin>>n;
    int k=0;
    for(i=1;i<=n;i++)
    {
        fin>>vec[i];
        x=vec[i];
        poz=bs(0,k,x);
        capat[poz+1]=x;
        v[i]=poz+1;
        ma=max(ma,v[i]);
        k=max(k,poz+1);
    }
   gen_sol(gata);
    fout<<lung<<"\n";
    for(i=lung;i>=1;i--)
        fout<<gata[i]<<" ";
    return 0;
}