大佬求解,为什么我这段代码结果不对,但我觉得思路没问题
12359查看
蓝桥之王
2025-01-19 12:13

请问大佬们,为什么我这段代码算出来的不对?

include;

include;

include;

using namespace std; int n, m; int l[300010], r[300010]; int pre[300010]; int a[300010];

typedef pair<int, int> p; vector

t;

int main() { cin >> n >> m; for (int i = 1; i <= m; i++) { cin >> l[i] >> r[i]; a[l[i]]++; a[r[i] + 1]--; }

int z = 0;
bool isEnter = false;
int lt = 0;
for (int i = 1; i <= n; i++)
{
    z += a[i];

    if (z == 0) pre[i] = pre[i - 1] + 1;
    else pre[i] = pre[i - 1];
    if (z >= 2 && !isEnter)
    {
        isEnter = true;
        lt = i;
    }
    else if (z < 2 && isEnter)
    {
        isEnter = false;
        t.push_back({ lt,i - 1 });
    }
}

for (int i = 1; i <= m; i++)
{
    int ans = pre[n];
    int num = 0;
    for (int j = 0; j < t.size(); j++)
    {
        if (t[j].second<l[i] || t[j].first>r[i]) continue;

        if (l[i] >= t[j].first)
        {
            if (r[i] <= t[j].first)
            {
                num += r[i] - l[i] + 1;
            }
            else {
                num += t[j].second - l[i] + 1;
            }

        }
        else {
            num += r[i] - t[j].first + 1;
        }

    }
    
    int num0 = pre[r[i]] - pre[l[i] - 1];
    ans += r[i] - l[i] + 1 - num0 - num;
    cout << ans << endl;

}


return 0;
copy

}

全部回复(1)
cc
429
cc
L429
2025-01-20 10:38

可以在课程答疑群内提问! 购课成功后,站内信会收到开课提示,并且有售后二维码,扫码添加学姐

✉️站内信:https://www.lanqiao.cn/user/messages/

回复
你的回复