这题是不是数据有问题
查看原帖
这题是不是数据有问题
767048
Rookie_h楼主2023/2/20 00:15
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n;
ll m, a[10000001], t[10000001];
void fun(ll q[], int l, int r)
{
    if (l >= r) // 很重要 排序的结束
        return;
    int mid = (l + r) / 2;
    fun(q, l, mid);
    fun(q, mid + 1, r);
    int f = 1, i = l, j = mid + 1;
    while (i <= mid && j <= r)
    {
        if (q[i] >= q[j])
            t[f++] = q[j++];
        else
            t[f++] = q[i++];
    }
    while (i <= mid)
        t[f++] = q[i++];
    while (j <= r)
        t[f++] = q[j++];
    for (int k = 1, h = l; h <= r; k++, h++)
        a[h] = t[k];
}
bool check(ll q[], int f, int h)
{
    ll t = 0;
    for (int i = 1; i <= n; i++)
    {
        if (q[f] < q[i])
            t += q[i] - q[f];
    }
    if (t >= h)
        return true;
    else
        return false;
}
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    fun(a, 1, n);
    int l = 1, r = n;
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (check(a, mid, m))
            l = mid;
        else
            r = mid - 1;
    }
    cout << a[r];
}

这是代码 这是第一个点

10 30

15 27 9 32 29 7 7 21 8 34

但是第一个点的答案是23然而数据中并没有23

2023/2/20 00:15
加载中...