Pagini recente » Cod sursa (job #1552406) | Cod sursa (job #751467) | Cod sursa (job #363063) | Cod sursa (job #170376) | Cod sursa (job #2275013)
#include <fstream>
using namespace std;
int v[100000],q[100000],p[100000];
int cautare(int p,int u,int x,int q[],int OK)
{
while (p<u)
{
int m=(p+u)/2;
if (x>q[m])
{
p=m+1;
OK=-1;
}
if (x<q[m])
{
u=m-1;
OK=1;
}
if (x==q[m])
{
return m;
}
}
if (OK==-1)
return p;
else
return u+1;
}
int main()
{
int n,i,j;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
fin>>n;
for (i=1; i<=n; i++)
{
fin>>v[i];
}
q[1]=v[1];
p[1]=1;
int u=1;
for (i=2; i<=n; i++)
{
if (u==1)
{
if (v[i]>q[u])
{
u++;
q[u]=v[i];
p[i]=u;
}
else
{
q[u]=v[i];
p[i]=1;
}
}
else
{
if (v[i]<=q[u] && v[i]>=q[1])
{
int x=cautare(1,u,v[i],q,1);
q[x]=v[i];
p[i]=x;
}
if (v[i]>q[u])
{
u++;
q[u]=v[i];
p[i]=u;
}
if (v[i]<q[1])
{
q[1]=v[i];
p[i]=1;
}
}
}
fout<<u<<"\n";
return 0;
}