佬们帮忙看看哪错了
查看原帖
佬们帮忙看看哪错了
1128181
Evolution333楼主2023/12/15 13:37
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

typedef pair<int,int> PII;

const int N = 4e5+10;

int a[N];
vector<int> alls;
vector<PII> add;
int n,length;

int find(int x)
{
    int l = 0, r = alls.size()-1;
    while(l < r)
    {
        int mid = l + r >> 1;
        if(alls[mid] >= x) r = mid;
        else l = mid + 1;
    }
    return l + 1;
}

int main()
{
    scanf("%d",&n);
    while(n--)
    {
        long long l,r;
        scanf("%lld%lld",&l,&r);

        alls.push_back(l);
        alls.push_back(r);
        add.push_back({l,r});
    }

    sort(alls.begin(),alls.end());
    alls.erase(unique(alls.begin(),alls.end()),alls.end());


    for(auto item : add)
    {
        int nl = find(item.first);
        int nr = find(item.second);

        a[nl]++;
        a[nr]--;
    }

    for(int i=1;i<=alls.size();i++) a[i] += a[i-1];

    for(int i=1;i<=alls.size();i++)
    {
        int st,ed;
        if(a[i] && !a[i-1]) st = alls[i-1];
        if(!a[i] && a[i-1])
        {
            ed = alls[i-2];
            length += ed-st+1;
        }
    }

    cout<<length;

    return 0;
}
2023/12/15 13:37
加载中...