其他分享
首页 > 其他分享> > P3143 钻石收藏家

P3143 钻石收藏家

作者:互联网

传送门

题目需要求出两段不重合的序列使两段长度和最大。代码关键在于循环变量作为左指针,左右指针之间维护的是第二个序列,而第一个序列在左右指针向前推进的过程中其最大长度被保存下来了。

#include<iostream>
#include<algorithm>
#define MAXN 50007
using namespace std;
int n, pre, len[MAXN], Dio[MAXN], ans, r = 2, k;
int main(void)
{
    cin >> n >> k;
    for (int i = 1; i <= n; i++)
        cin >> Dio[i];
    sort(Dio + 1, Dio + n + 1);
    for (int l = 1; l <= n; l++)
    {
        while (Dio[r] <= Dio[l] + k && r < n + 1) r++;
        len[r] = max(r - l, len[r]);
        pre = max(pre, len[l]);
        ans = max(pre + r - l, ans);
    }
    cout << ans;
    return 0;
}

 

标签:钻石,P3143,Dio,int,收藏家,MAXN,序列,include,指针
来源: https://www.cnblogs.com/xqk0225/p/16079350.html