Cod sursa(job #2231539)

Utilizator Lazar_LaurentiuLazar Laurentiu Lazar_Laurentiu Data 14 august 2018 19:30:58
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>
#include <vector>
#define MAX 100001

using namespace std;

int n,a[MAX],nmax[MAX],smax,mmax[MAX],s,d,m;
vector<int> r;

int main()
{
    ifstream f ("scmax.in");
    ofstream g ("scmax.out");
    f>>n;
    for(int i=1;i<MAX;i++)nmax[i]=2e9;
    for(int i=1;i<=n;i++){
      f>>a[i]; mmax[i]=1;
      s=0;d=smax;
      while(s<d){
        m=(s+d+1)/2;
        if(nmax[m]>a[i]-1)d=m-1;
        else s=m;
      }
      nmax[s+1]=min(nmax[s+1],a[i]); mmax[i]=s+1;
      if(s+1>smax)smax=s+1;
    }
    g<<smax<<'\n';
    for(int i=n,aj=smax;i>=1&&aj>=1;i--)
      if(mmax[i]==aj)r.push_back(a[i]),aj--;
    for(int i=r.size()-1;i>=0;i--)g<<r[i]<<" ";
    f.close ();
    g.close ();
    return 0;
}