Pagini recente » Cod sursa (job #2540341) | Cod sursa (job #1111905) | Cod sursa (job #1403272) | Cod sursa (job #404086) | Cod sursa (job #536026)
Cod sursa(job #536026)
#include<stdio.h>
#define N 100001
using namespace std;
int v[N], minim;
int best[N];
int l[N],nr;
int sol[N];
int maxim;
int n,poz;
void citire()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d",&v[i]);
}
int caut(int k)
{
int p=0,u=nr;
int m=(p+u)/2;
while(p<=u)
{
if(v[l[m]]<k && k <= v[l[m+1]])
return m;
else
if(v[l[m+1]] > k)
{
p=m+1;
m=(p+1)/2;
}
else
{
u=m-1;
m=(p+1)/2;
}
}
return nr;
}
void vector()
{
nr=1;
sol[1]=1;
l[1]=1;
l[0]=0;
for(int i=2;i<=n;i++)
{
poz=caut(v[i]);
sol[i]=l[poz];
best[i]=poz+1;
l[poz+1]=i;
if(nr<poz+1)
nr=poz+1;
}
poz=0;
for(int i=1;i<=n;i++)
if(maxim<best[i])
{
maxim=best[i];
poz=i;
}
printf("%d\n",maxim);
}
int main()
{
citire();
vector();
return 0;
}