Cod sursa(job #2013951)

Utilizator Lazar_LaurentiuLazar Laurentiu Lazar_Laurentiu Data 22 august 2017 17:06:56
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 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;
      }
      if(a[i]<nmax[0])nmax[0]=a[i];
      else{
        nmax[s+1]=a[i]; mmax[i]=s+1;
        if(s==smax) smax++;
      }
      if(i==1)smax=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;
}