Codeforces Gym 101982 F Rectangles —— 线段树+扫描线求面被矩形个数为奇数个的面积

Codeforces Gym 101982 F Rectangles —— 线段树+扫描线求面被矩形个数为奇数个的面积_第1张图片
Codeforces Gym 101982 F Rectangles —— 线段树+扫描线求面被矩形个数为奇数个的面积_第2张图片

题意:

给你n个矩形,问你所有多少1*1的格子被奇数个矩形覆盖。

题解:

用线段树做一下区间更新即可。这里是奇数个矩形, 可以用异或来处理 数组。用sum记录一个区间上的有效的长度,被异或的话就根据原来的长度减一下就行。
需要注意的是,我们存的是边值。只需要将原来的update和运算修改一下即可。

#include
using namespace std;
const int N=1e5+5;
#define ll long long
struct node
{
    int l,r,h;
    bool operator< (const node& a)const
    {
        return h>1;
    cal(l,mid,root<<1);
    cal(mid,r,root<<1|1);
    flag[root]=0;
}
void update(int l,int r,int root,int ql,int qr)
{
    if(l>=ql&&r<=qr)
    {
        cal(l,r,root);
        flag[root]^=1;
        return ;
    }
    pushdown(l,r,root);
    int mid=l+r>>1;
    if(mid>ql)
        update(l,mid,root<<1,ql,qr);
    if(mid

你可能感兴趣的:(扫描线,线段树)