1 条题解

  • 0
    @ 2022-11-22 14:29:34

    做法1

    #include <bits/stdc++.h>
    using namespace std;
    int n, k;
    int a[512345];
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin >> n >> k;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        sort(a + 1, a + n + 1);
        long long ans = 0;
        for (int i = 1; i <= n; i++)
        {
            //第一个大于 a[i]+k 的位置之后的都是差距过大的
            int pos = lower_bound(a + 1, a + n + 1, a[i] + k) - a;
            ans = ans + (n - pos + 1);
        }
        cout << ans << "\n";
        return 0;
    }
    

    做法2

    #include <bits/stdc++.h>
    using namespace std;
    int n, k;
    int a[512345];
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin >> n >> k;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        sort(a + 1, a + n + 1);
        long long ans = 0;
        for (int i = 1; i <= n; i++)
        {
            int now = (a + n) - lower_bound(a + i + 1, a + n + 1, a[i] + k) + 1;
            ans = ans + now;
        }
        cout << ans << "\n";
        return 0;
    }
    
    • 1

    信息

    ID
    1131
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    189
    已通过
    52
    上传者