Cod sursa(job #2564587)

Utilizator MihclerioVladimir Chim Mihclerio Data 1 martie 2020 23:51:51
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>

const int inf=2e9;
const int nmax=2e5;

using namespace std;

int a[nmax],p[nmax];

void afisare(int pos)
{
  for(int i=pos-1;i>=0;i--)
  if(p[i]+1==p[pos])
  {
    afisare(i);
    break;
  }
  cout<<a[pos]<<" ";
}

int main()
{
  ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
  freopen("scmax.in","r",stdin);
  freopen("scmax.out","w",stdout);
  int n;
  cin>>n;
  vector<int>dp(n+1,inf);
  dp[0]=-inf;
  int ans=0,mx;
  for(int i=0;i<n;i++)
  {
    cin>>a[i];
    int pos=(upper_bound(dp.begin(),dp.end(),a[i])-dp.begin());
    if(dp[pos-1]<a[i] && a[i]<dp[pos])
    {
      dp[pos]=a[i];
      if(pos>ans)
      {
        ans=pos;
        mx=i;
      }
      p[i]=pos;
    }
  }
  cout<<ans<<"\n";
  //for(int i=0;i<n;i++) cout<<p[i]<<" ";
  //cout<<"\n";
  afisare(mx);
}