Cod sursa(job #3320176)

Utilizator oliv_1Bostinescu Octavian oliv_1 Data 4 noiembrie 2025 14:21:58
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;
int v[100005],dp[100005],last[100005],ans[100005];
int main()
{
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
   int n,l=0,pos;
   cin>>n;
   for(int i=1;i<=n;i++)
   {
       cin>>v[i];
       if(v[i]>v[dp[l]])
       {
           l++;
           dp[l]=i;
          last[i]=dp[l-1];
       }
       else
       {
           pos=0;
           for(int pas=17;pas>=0;pas--)
           {
               if(pos+(1<<pas)<=l&&v[i]>v[dp[pos+(1<<pas)]])
                pos+=(1<<pas);
           }
           last[i]=dp[pos];
           pos++;
           dp[pos]=i;
       }


   }
   int curr=dp[l],pt=l;
   while(curr!=0)
   {
       ans[pt]=v[curr];
       pt--;
       curr=last[curr];
   }
   cout<<l<<'\n';
   for(int i=1;i<=l;i++)
    cout<<ans[i]<<" ";
    return 0;
}