Cod sursa(job #1252713)

Utilizator diana-t95FMI Tudoreanu Diana Elena diana-t95 Data 31 octombrie 2014 05:06:25
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include<fstream>
using namespace std;
int n, a[100001], c[100001], ind[100001],mn,nr,val;
#define maxv 2000000000
ofstream g("scmax.out");
void citeste()
{
    int i;
    ifstream f("scmax.in");
    f>>n;
    for (i=1;i<=n;i++)
        f>>a[i];
}
void afisare(int x)
{
    int i;

    for (i=x;i>=1;i--)
        if (ind[i] == nr && (val==-1 || val>a[i]))
        {
            val = a[i];
            nr--;
            if (nr>0)
                afisare(i-1);
            g<<a[i]<<" ";
            break;
        }
}

void cautare(int st, int dr,int val)
{
    int m = (st+dr)/2;

    if (st<=dr)
    {
        if (val>c[m])
            cautare(m+1,dr,val);
        else
        {
            if (mn>m) mn=m;
            cautare(st,m-1,val);
        }
    }
}
void solutie()
{
    int i;

    nr=0;

    for (i=1;i<=n;i++)
    {
        if (nr==0)
        {
            c[++nr] = a[i];
            ind[i] = 1;
        }
        else
        {
            mn=nr+1;

            if (a[i]<=c[1]) { ind[i]=1; c[1]=a[i]; continue;}
            cautare(1,nr,a[i]);



            //if  (mn == nr && a[i]>c[nr])
            //    { mn++; nr++; }


            c[mn] = a[i];
            ind[i] = mn;

            if (nr<mn) nr=mn;
        }
    }

}
int main()
{
    citeste();
    solutie();

    g << nr << '\n';
    val = -1;
    afisare(n);
}