Cod sursa(job #2928743)

Utilizator stefan24Sandor Stefan stefan24 Data 23 octombrie 2022 19:39:29
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>
using namespace std;
#define nmax 100000
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[nmax+5],p[nmax+5],sir[nmax+5],d[nmax+5];
int main()
{
    int n,k=1;
    f>>n;
    for(int i=1;i<=n;++i)
        f>>v[i];
    d[k]=v[1];
    p[1]=1;
    for(int i=2;i<=n;++i)
        if(v[i]>d[k])d[++k]=v[i],p[i]=k;
        else {
            int st=1,dr=k,poz=k+1;
            while(st<=dr){
                int mid=(st+dr)/2;
                if(d[mid]>v[i])poz=mid,dr=mid-1;
                else st=mid+1;
            }
            d[poz]=v[i];
            p[i]=poz;
        }
    int n1=n;
    for(int i=k;i>=1;--i){
        while(p[n1]!=i)n1--;
        sir[i]=n1;
    }
    g<<k-1<<"\n";
    for(int i=1;i<=k;++i)
        g<<v[sir[i]]<<" ";
}