UPC小奇画画(sort+map)

#include <bits/stdc++.h>
using namespace std;


struct Node{
    int l;
    int r;
};

int cmp(Node A,Node B){
    return (A.r - A.l) < (B.r - B.l);
}

Node a[300005];

int main(){
    int n,x,R;
    int ans = 0;
    map<int,int> M;
    scanf("%d",&n);
    for(int i = 1;i <= n;i ++){
        scanf("%d%d",&x,&R);
        a[i].r = x + R;
        a[i].l = x - R;
    }
    sort(a + 1,a + n + 1,cmp);
    int tl,tr;
    for(int i = 1;i <= n;i ++){
        tl = a[i].l;
        tr = a[i].r;
        if(!M[a[i].l] && !M[a[i].r]){
            M[a[i].l] = M[a[i].r] = i;
            continue;
        }
        if(M[tl] && M[tr]){
            if(M[tl] == M[tr]){ans++;}
            else{
                int t = M[tr];
                M[a[t].r] = M[tl];
                a[M[tl]].r = a[t].r;
            }
            continue;
        }
        if(M[a[i].l]) {
            M[tr] = M[tl];
            a[M[tr]].r = tr;
        }
        else {
            M[tl] = M[tr];
            a[M[tr]].l = tl;
        }
    }
    printf("%d\n",ans + n + 1);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/love-fromAtoZ/p/9381207.html
UPC
今日推荐