Cod sursa(job #1090099)

Utilizator mihaitapaulMihaita Paul mihaitapaul Data 22 ianuarie 2014 12:42:09
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
using namespace std;
#define DMAX 100006
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,best[DMAX],k,lgmax;
struct punct
{
    int val;
    int pred;
};
punct sir[DMAX];
void citire()
{
    fin>>n;
    for(int i=1; i<=n; i++)
    {
        fin>>sir[i].val;
        sir[i].pred=0;
    }
}
int caut_binara(int a,int st,int dr)
{
    int m;
    m=0;
    if(a==2)
        int b=1;
    while(st<=dr)
    {
        if(a>best[m])
        {
            st=m+1;
        }
        else
            dr=m-1;
        m=(st+dr)/2;
    }
    return st;
}
void pd()
{
    int i,j;
    for(i=1;i<=n;i++)
    {
        if(sir[i].val==1)
            int a=1;
        if(sir[i].val>best[k])
            {
                k++;
                lgmax=k;
                best[k]=sir[i].val;
                sir[i].pred=k;
            }
        else
        {
            j=caut_binara(sir[i].val,1,k);
            best[j]=sir[i].val;
            sir[i].pred=j;
        }
    }
}
void afisare()
{
    fout<<lgmax<<'\n';
    for(int i=1;i<=k;i++)
        fout<<best[i]<<' ';
}
int main()
{
    citire();
    pd();
    afisare();
    return 0;
}