給定數組,可選 ≤ k 個數,使其值相同且下標連續(允許中間有空隙)。求最大可選數量。
(value, index) 排序,值相同則按下標排序。sum[i] 記錄下標間隙總和。sum[r] - sum[j] ≤ k。段長 = r - j。sort(T+1, T+n+1, cmp);
for i=1..n:
if (T[i].c == T[i-1].c) sum[i] = sum[i-1] + T[i].id - T[i-1].id - 1;
else sum[i] = 0;
ans = 1;
for (int i=1; i<=n; ) {
int R = upper_bound(g, g+n+1, T[i].c) - g; // 同值段右界
for (int j=i; j
O(n log n),排序 + 每段二分。