HihoCoder 一下 第152周 区间求差


题目1 : 区间求差

时间限制: 10000ms
单点时限: 1000ms
内存限制: 256MB

描述

给定两个区间集合 A 和 B,其中集合 A 包含 N 个区间[ A1A2 ], [ A3A4 ], ..., [ A2N-1A2N ],集合 B 包含 M 个区间[ B1B2 ], [ B3B4 ], ..., [ B2M-1B2M ]。求 A - B 的长度。

例如对于 A = {[2, 5], [4, 10], [14, 18]}, B = {[1, 3], [8, 15]}, A - B = {(3, 8), (15, 18]},长度为8。

输入

第一行:包含两个整数 N 和 M (1 ≤ NM ≤ 100000)。

第二行:包含 2N 个整数 A1A2, ..., A2N (1 ≤ Ai ≤ 100000000)。

第三行:包含 2M 个整数 B1B2, ..., B2M (1 ≤= Bi ≤ 100000000)。

输出

一个整数,代表 A - B 的长度。

样例输入
3 2
2 5 4 10 14 18
1 3 8 15
样例输出
8
A - B = A  - (A交B);

先对A,B 化简 -- 然后求交即可。


扫描二维码关注公众号,回复: 1522097 查看本文章

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{
    int x,y;
}A[5][100100];
bool cmp(node x,node y){
    return x.x<y.x;
}
int n,m,n1,m1;
int ss()
{
    sort(A[1]+1,A[1]+1+n,cmp);
    sort(A[2]+1,A[2]+1+m,cmp);
    n1=m1=0;
    int ans=0;
    int i=1,x,y;
    while (i<=n)
    {
        x=A[1][i].x;
        y=A[1][i].y;
        i++;
        while (i<=n&&A[1][i].x<=y){
            y=max(y,A[1][i].y);
            i++;
        }
        n1++;
        A[3][n1].x=x;
        A[3][n1].y=y;
        ans+=y-x;
    }
    i=1;
    while (i<=m)
    {
        x=A[2][i].x;
        y=A[2][i].y;
        i++;
        while (i<=m&&A[2][i].x<=y){
            y=max(y,A[2][i].y);
            i++;
        }
        m1++;
        A[4][m1].x=x;
        A[4][m1].y=y;
    }
    return ans;
}
int sp(int i,int j){
    return max(0,min(A[3][i].y,A[4][j].y)-max(A[3][i].x,A[4][j].x));
}
int ans(){
    int ans=0;
    int i,j;
    i=j=1;
    while (i<=n1&&j<=m1){
        ans+=sp(i,j);
        if (A[3][i].y>A[4][j].y)
            j++;
        else if (A[3][i].y<A[4][j].y)
            i++;
        else
            i++,j++;
    }
    return ans;
}
int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
        scanf("%d%d",&A[1][i].x,&A[1][i].y);
    for (int i=1;i<=m;i++)
        scanf("%d%d",&A[2][i].x,&A[2][i].y);
    printf("%d\n",ss()-ans());

    return 0;
}


猜你喜欢

转载自blog.csdn.net/leibniz_zhang/article/details/72851790
今日推荐