Cod sursa(job #2950826)

Utilizator lucametehauDart Monkey lucametehau Data 4 decembrie 2022 19:02:12
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.62 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n,x,sol,p,i,st,dr,mid;
int v[100005],dp[100005],a[100005],poz[100005];
int main() {
  cin>>n;
  for(i=1;i<=n;i++)cin>>v[i],dp[i]=2e9;
  for(i=1;i<=n;i++){
    st=0,dr=n,mid;
    while(st<=dr) {
      mid=(st+dr)>>1;
      if(dp[mid]<=v[i])
        st=mid+1;
      else
        dr=mid-1;
    }
    if(dp[st-1]<v[i])
      dp[st]=v[i],a[i]=st,sol=max(sol,st);
  }
  cout<<sol<<"\n";
  for(i=n;i>=1;i--) {
    if(a[i]==sol)
      poz[++x]=v[i],sol--;
  }
  while(x)cout<<poz[x--]<<" ";
}