Cod sursa(job #2798713)

Utilizator Lazar_LaurentiuLazar Laurentiu Lazar_Laurentiu Data 11 noiembrie 2021 19:22:30
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#define MAX 100010
#define NMAX 2000000000

using namespace std;

int n,ans;
int a[MAX],nmax[MAX],mmax[MAX],vans[MAX];

int main()
{
    ifstream f ("scmax.in");
    ofstream g ("scmax.out");
    f>>n;
    for(int i=1;i<=n;i++)
      f>>a[i],
      nmax[i]=NMAX;

    for(int i=1;i<=n;i++){
      mmax[i]=1;
      int st=0,dr=ans;
      while(st<dr){
        int mij = (st+dr+1)/2;
        if(nmax[mij] < a[i]) st=mij;
        else dr=mij-1;
      }
      nmax[st+1]=min(nmax[st+1],a[i]);
      mmax[i]=st+1;
      ans = max(ans,mmax[i]);
    }
    g<<ans<<'\n';
    vans[ans+1]=NMAX;
    for(int i=n,j=ans;i>=1&&j;i--)
      if(mmax[i]==j && a[i]<vans[j+1]){
        vans[j] = a[i];
        j--;
      }
    for(int i=1;i<=ans;i++)
      g<<vans[i]<<" ";
    f.close();
    g.close();
    return 0;
}