Cod sursa(job #2704143)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 9 februarie 2021 20:04:25
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
const int NMAX=100005;
int lung[NMAX],k,best[NMAX];
int v[NMAX],last[NMAX],sol[NMAX];
int cautarebin(int val,int n)
{
    int st=0,dr=n,rasp;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(v[best[mij]]<v[val])
        {
            rasp=mij;
            st=mij+1;
        }
        else
            dr=mij-1;
    }
    return rasp;
}
int main()
{
    int n,i,kon=0,maxi=0,j,copie,m,t=0,poz;
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>v[i];
    for(i=1; i<=n; i++)
    {
        poz=cautarebin(i,maxi);
         lung[i]=poz+1;
        best[poz+1]=i;
        if(lung[i]>maxi)
            maxi=lung[i];
    }
    fout<<maxi<<"\n";
    for(i=n; i>=1; i--)
        if(lung[i]==maxi)
        {
            sol[++k]=i;
            maxi--;
        }
    for(i=k; i>=1; i--)
        fout<<v[sol[i]]<<" ";
}