Cod sursa(job #2950824)

Utilizator lucametehauDart Monkey lucametehau Data 4 decembrie 2022 18:56:04
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n,x,sol,p,i;
int v[100005],dp[100005],a[100005],poz[100005];
int main() {
  cin>>n;
  for(int i = 1; i <= n; i++) {
    cin>>v[i];
    dp[i]=2e9;
  }
  dp[0]=-2e9;
  for(i=1;i<=n;i++){
    int 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]&&v[i]<dp[st])
      dp[st]=v[i],a[i]=st;
  }
  for(i=0;i<=n;i++){
    if(dp[i]<2e9)
      sol=i;
  }
  cout<<sol<<"\n";
  for(i=n;i>=1;i--) {
    if(a[i]==sol)
      poz[++poz[0]]=v[i],sol--;
  }
  reverse(poz+1,poz+poz[0]+1);
  for(i=1;i<=poz[0];i++)
    cout<<poz[i]<<" ";
  return 0;
}