对于一个数组,找出这样一个序列对(i, j),满足A[i] < A[j],且使 j - i的值最大,输出j - i的值。
int findIndex(int a[], int n, vector<int> &buf, int k)
{
int left = 0;
int right = buf.size() - 1;
while (left < right - 1)
{
int mid = left + (right-left)/2;
if (a[buf[mid]] < k)
{
right = mid;
}
else
{
left = mid;
}
}
if (a[buf[left]] < k)
{
return left;
}
else if (a[buf[right]] < k)
{
return right;
}
return -1;
}
int fun(int a[], int n)
{
if (n < 2)
{
return -1;
}
vector<int> buf;
buf.push_back(0);
int result = -1;
for (int i = 1; i < n; i++)
{
int size = buf.size();
if (a[i] < a[buf[size-1]])
{
buf.push_back(i);
}
else if (a[i] > a[buf[size-1]])
{
int index = findIndex(a, n, buf, a[i]);
if (index >= 0 && i-buf[index] > result)
{
result = i - buf[index];
}
}
}
return result;
}