题面:
题意:
简化一下,就是求N个立方体中重叠了3次及以上的体积和
分析:
类比于矩形面积并,我们以扫描面来切割立方体,只需计算出当前扫描面被覆盖了3次及以上的面积*相邻两个扫描面的高度差即可,不同于矩形面积并的做法的是:如果我们依然在线段树上记录每个扫描面的信息,那么必须要写二维线段树,这.....有点麻烦,由于N的范围不大,我们可以暴力找出包含了【当前扫描面的高度,下一个扫描面的高度】的所有立方体,然后对当前扫描面跑一遍扫描线求出覆盖了3次及以上的面积
代码:
#include <bits/stdc++.h>
#define lson x<<1
#define rson x<<1|1
using namespace std;
typedef long long LL;
const int maxn = 2e3+223;
const int maxz = 505;
int T,n,x,y,z,xx,yy,zz,len,X[maxn],Z[maxn],tr[maxn<<2][4],tag[maxn<<2];
struct node{
int l,r,w,h1,h2,op;
};
vector<node> ve,we;
void init(){
len = 0;
ve.clear();
}
bool cmp(node a,node b){
return a.w < b.w;
}
void pushup(int x,int l,