3 条题解

  • -1
    @ 2022-2-8 8:25:11

    #include #include #include #include using namespace std; const int N = 50010; struct node{ int l, r, x; bool operator <(const node& a) const{ if(r == a.r) return l>a.l; return r>a.r; } }a[N];

    priority_queue p; int n; bool cmp(node a, node b){ if(a.l == b.l) return a.r<b.r; return a.l<b.l; }

    int ans[N]; int main(){ cin>>n; int res = 0; for(int i=1; i<=n; i++){ cin>>a[i].l>>a[i].r; a[i].x = i; } sort(a+1, a+n+1, cmp);

    for(int i=1; i<=n; i++){
        if(!p.empty() && p.top().r < a[i].l){
            ans[a[i].x] = ans[p.top().x];
            p.pop();
        }else{
            res++;
            ans[a[i].x] = res;
        }
        p.push(a[i]);
    }
    
    cout<<res<<endl;
    for(int i=1; i<=n; i++){
        cout<<ans[i]<<endl;
    }
    return 0;
    

    }

    信息

    ID
    23
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    163
    已通过
    98
    上传者