n*n的矩形,由1*1的单位方格构成,先可以对其中的子矩形染色(黑或白),染色完成后,有多少个白色单位方格?第一次做这种题,第一眼看上去感觉应该是二维线段树....后来在网上查了查这类覆盖,统计的问题可以用矩形切割来写,果断学习到了新的姿势...大致思路就是倒着扫描每个矩形,处理每个矩形时,向后遍历判断后面的矩形是否与其重叠,重叠的话就分割冲若干种小的矩形继续处理,直到最后统计没有被覆盖的面积..实现直接看代码吧..
#include <iostream>
#include <cstdio>
#include <memory.h>
using namespace std;
typedef long long ll;
int n,m;
int x1[10020],x2[10020],y1[10020],y2[10020];
int col[10020];
char c[3];
int cnt;
void slove(int xs,int ys,int xt,int yt,int d,int c)
{
while (((xs>=x2[d])||(xt<=x1[d])||(ys>=y2[d])||(yt<=y1[d]))&& d<=m) d++;
if (d==m+1)
{
if (c) cnt+=(yt-ys)*(xt-xs);
return;
}
if (xs<x1[d])
{
slove(xs,ys,x1[d],yt,d+1,c);
xs=x1[d];
}
if (xt>x2[d])
{
slove(x2[d],ys,xt,yt,d+1