P8889求助 不知道二分哪里错了

P8889 [入门赛 #7] 狠狠地切割 (Hard Version)

91xrz @ 2023-07-21 09:33:11

后面70%过不了。。

#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
long long n, m, cnt,ans;
long long a[N];
long long b[N];
bool is_ture;
bool check(int x)
{
    int l=0,r=m+1;
    while (l + 1 != r)
    {
        int mid = (l + r) / 2;
        if (b[mid] >= x)
            r = mid;
        else l = mid;
    }
    return b[r] == x;//r为第一个大于等于x的数 判断r是否等于x
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    for(int i=1;i<=n;i++)
        cin >> a[i];
    for(int i=1;i<=m;i++)
        cin >> b[i];
    sort(b+1,b+1+m);

    for (int i = 1; i <= n; i++)
    {
        if (check(a[i]))
        {
            if (is_ture)
                is_ture = false;
        }

        else if (is_ture == 0)
        {
            is_ture = 1;
            cnt++;
        }
    }
    cout << cnt;
}

感觉是数据范围的问题?不知道咋解决


by Chlero @ 2023-10-15 11:49:32

把 check 传进来的 x 改成 longlong 试试?


by Chlero @ 2023-10-15 11:50:19

我就是这样 WA 到 30pts 的


by Chlero @ 2023-10-15 11:52:07

就是这个问题 提交记录


|