Cod sursa(job #2511905)

Utilizator darisavuSavu Daria darisavu Data 20 decembrie 2019 09:12:28
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[100005],d[100005],n,i,z,p,t[100005];
int caut_bin(int x)
{
    int st=1,dr=z,mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(a[d[mij]]<x) st=mij+1;
        else dr=mij-1;
    }
    return st;
}
void afis(int c)
{
    if(z>0)
    {
       for(int k=c;k>=1;k--)
       {
           if(t[k]==z)
           {
               z--;
               afis(k-1);
               g<<a[k]<<" ";
               break;
           }
       }
    }
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++) f>>a[i];
    for(i=1;i<=n;i++)
    {
        p=caut_bin(a[i]);
        t[i]=p;
        if(p>z) {z++; d[z]=i;}
        else if(a[i]<a[d[p]]) d[p]=i;
    }
    g<<z<<'\n';
    afis(n);
    return 0;
}