Cod sursa(job #2008074)

Utilizator Cudrici_CarinaCudrici Carina Cudrici_Carina Data 5 august 2017 11:54:49
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 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],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) return M;
            if(a[M] < x)   S=M+1;
            if(a[M] > x)   D=M-1;
        }
}

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--]<<" ");
}