Cod sursa(job #2519658)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 8 ianuarie 2020 09:30:26
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
//#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int Max=100005;
int v[Max],nr,drum[Max],sir[Max],sol[Max],q,n;
int cautare(int x,int st,int dr)
{
    int poz=-1;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(x>v[mij])
            st=mij+1;
            else
            {
                poz=mij;
                dr=mij-1;
            }
    }
    return poz;
}
int main()
{
   in>>n;
   for(int i=1;i<=n;i++)
   {
       int x; in>>x; int poz;
       sir[i]=x;
       poz=cautare(x,1,nr);
       if(poz==-1)
        v[++nr]=x;
       else
        v[poz]=x;
       drum[i]=(poz!=-1 ? poz:nr);

   }
   out<<nr<<"\n"; int num=nr;
   for(int i=n;i>=1;i--)
   {
       if(drum[i]==num)
       {
            sol[++q]=sir[i];
            num--;
       }


   }
   for(int i=q;i>=1;i--)
    out<<sol[i]<<" ";
    return 0;
}