Cod sursa(job #1655985)

Utilizator llalexandruLungu Alexandru Ioan llalexandru Data 18 martie 2016 16:43:25
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#define r(x) (x^(x-1)) & x
#define aibm 100000

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

struct arb{int num, pre;};

int n;
arb AIB[100005];

int Query(int x)
{
    int i, maxim=0;
    for (i=x; i>0; i-=r(i))
    {
        if (AIB[i].num > maxim)
            maxim=AIB[i].num;
    }
    return maxim;
}

void Add(int x, int sum)
{
    int i;
    for (i=x; i<=aibm; i+=r(i))
    {
        AIB[i].num=max(AIB[i].num, sum);
    }
}

int main()
{
    int cate=0, i, x, sol=0;
    fin>>n;
    for (i=1; i<=n; i++)
    {
        fin>>x;
        cate=Query(x-1);
        Add(x, cate+1);
    }
    for (i=1; i<=30; i++)
        if (sol<AIB[i].num)
            sol=AIB[i].num;
    fout<<sol;
    return 0;
}