Pagini recente » Cod sursa (job #733091) | Cod sursa (job #162879) | Cod sursa (job #1621824) | Cod sursa (job #1578040) | Cod sursa (job #1655985)
#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;
}