对于一个数组,找出这样一个序列对(i, j),满足A[i] < A[j],且使 j - i的值最大,输出j - i的值。
struct Node
{
int val;
int index;
Node(int v, int i)
{
val = v;
index = i;
left = right = NULL;
}
Node *left;
Node *right;
};
int visit(Node **buf, int n, int &result)
{
Node *root = buf[0];
for (int i = 1; i < n; i++)
{
Node *p = root;
while (true)
{
if (buf[i]->val < p->val)
{
if (p->left == NULL)
{
p->left = buf[i];
break;
}
else
{
p = p->left;
}
}
else if (buf[i]->val > p->val)
{
int temp = buf[i]->index - p->index;
if (temp > result)
{
result = temp;
}
if (p->right == NULL)
{
p->right = buf[i];
break;
}
else
{
p = p->right;
}
}
else
{
break;
}
}
}
}
int maxSpan(int a[], int n)
{
Node* buf[n];
for (int i = 0; i < n; i++)
{
buf[i] = new Node(a[i], i);
}
int result = 0;
visit(buf, n, result);
for (int i = 0; i < n; i++)
{
delete buf[i];
}
return result;
}