Pagini recente » Cod sursa (job #176981) | Cod sursa (job #1321082) | Cod sursa (job #1518729) | Cod sursa (job #2440292) | Cod sursa (job #2257681)
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
#define zeros(x) (x^(x-1)&x)
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,sol[100001],p,rad,M,val[100001],d[100001],Max;
struct element
{
int val;
int ind;
};
element v[100001],aib[100001];
bool cmp(struct element x,struct element y)
{
return (x.val<y.val);
}
void update(int x,int val)
{ d[x]+=val;
for(int i=x;i<=n;i+=zeros(i))
{
if(d[i]>aib[i].val)
{
aib[i].val=d[i];
aib[i].ind=i;
}
}
}
element calcul(int x)
{
element M;
M.val=0;
for(int i=x;i>0;i-=zeros(i))
if(M.val<aib[i].val)
M=aib[i];
return M;
}
int main()
{
f>>n;
for(int i=1; i<=n; i++)
{
f>>v[i].val;
val[i]=v[i].val;
v[i].ind=i;
aib[i].ind=i;
}
sort(v,v+n+1,cmp);
update(v[1].ind,1);
for(int k=2;k<=n;k++)
{ if(v[k].val!=v[k-1].val)
{element M=calcul(v[k].ind);
update(v[k].ind,M.val+1);
Max=max(M.val+1,Max);
}
}
g<<Max+1;
return 0;
}