Cod sursa(job #3004806)

Utilizator SamurayxJackDiaconescu Octavian SamurayxJack Data 16 martie 2023 16:57:16
Problema Subsir crescator maximal Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <bits/stdc++.h>
using namespace std;

const int NMAX =1e5+1;

ifstream fin ("scmax.in");
ofstream fout ("scmax.out");

long long v[NMAX],L[NMAX];
int P[NMAX],D[NMAX],n,k,nr;


int main()
{
   fin>>n;
   for(int i=1;i<=n;i++) fin>>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 poz=k+1,st=1,dr=k;
		while(st<=dr){
			int m=(st+dr)/2;
			if(D[m]>=v[i]) poz=m,dr=m-1;
			else st=m+1; 
		}
		D[poz]=v[i];
        P[i]=poz;
	}
  fout<<k<<'\n';
  int j=n;
  for(int i=k;i>=1;i--){
	while(P[j]>i) j--;
	L[++nr]=v[j];
  }
  for(int i=nr;i>=1;i--) fout<<L[i]<<" ";
  return 0;
}