Cod sursa(job #2008088)

Utilizator Cudrici_CarinaCudrici Carina Cudrici_Carina Data 5 august 2017 12:09:33
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<fstream>
using namespace std;
ifstream fi("scmax.in");
ofstream fo("scmax.out");

int n,i,j,a[100001],b[100001],poz[100001],sol[100001],S,D,k,P;

int cautare (int S,int D,int x,int a[])
{
int M;
    while(S<=D)
        {   M=(S+D)/2;
            if(a[M] < x)   S=M+1;
                    else   D=M-1;
        }
return S;
}

int main()
{
    fi>>n;
    for(i=1; i<=n; i++)  fi>>a[i];

   for(i=1; i<=n; i++)
    {
        P=cautare(1,k,a[i],b);  //cautam binar elementul a[i] in sirul b in intervalul[1,k]
        if (P>k)k++;
        b[P]=a[i];
        poz[i]=P;
    }

    for(i=n; i>=1&&k; i--)
           if(poz[i]==k) {sol[++j]=a[i];
                          k--;
                         }

    for(fo<<j<<'\n'; j; fo<<sol[j--]<<" ");
}