題目大意:給你n個立方體,求相交區域大於等於三次的體積和。
這題需要前面兩題的知識
體積並面積交:
對於面積交,另外建立len2陣列表示覆蓋2次的面積,len3陣列表示覆蓋3次及以上的面積
對於體積並,離散化x座標是為了建樹,離散化z座標是為了節省時間。對於所有的體積範圍進行面積交之和即為所求體積
#include #include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define mem(a,b) memset(a,b,sizeof(a))
#define pf printf
#define sf scanf
#define spf sprintf
#define pb push_back
#define debug printf("!\n")
#define maxn 2000+5
#define max(a,b) a>b?a:b
#define blank pf("\n")
#define ll long long
#define all(x) x.begin(),x.end()
#define ins(x) inserter(x,x.begin())
#define pqueue priority_queue
#define inf 0x3f3f3f3f
#define ls (rt<<1)
#define rs (rt<<1|1)
intn,m;
int hh[maxn],hh2[maxn],col[maxn<<3],len[maxn<<3],len2[maxn<<3],len3[maxn<<3
];struct
node
node(
int a,int b,int c,int d,int e,int
f):l(a),r(b),x(c),c(d),z1(e),z2(f){}
bool
operator
< (const node &b) const
}a[maxn
<<3],tmp[maxn<<3
];void pushup(int rt,int l,int
r)
else
if(col[rt] == 2
)
else
if(col[rt] == 1
)
}else
if(l==r) len[rt] = len2[rt] = len3[rt] = 0
;
else
}void update(int val,int l,int r,int l,int r,int
rt)
int mid = (l+r)>>1
;
if(l <=mid) update(val,l,r,l,mid,ls);
if(r > mid) update(val,l,r,mid+1
,r,rs);
pushup(rt,l,r);
}int
main()
sort(hh+1,hh+1+v);
sort(hh2+1,hh2+1+v);
sort(a+1,a+1+v);
int d=1,d2=1
;
for(i=2;i<=v;i++)
if(hh[i]!=hh[i-1
]) hh[++d]=hh[i];
for(i=2;i<=v;i++)
if(hh2[i]!=hh2[i-1
]) hh2[++d2]=hh2[i];
int ct =0
;
for(j=1;j<=d2-1;j++)
}pf(
"case %d: %i64d\n
",kase++,ans);
}return0;
}
HDU 3642 掃瞄線求覆蓋3次的體積 線段樹
hdu 3642 至少有2個以上不同地點才存在寶藏.即3個以上的空間立體交叉覆蓋出的體積,覆蓋3次及以上 x y z包括整個庫,意思就是給出頂點,觀察樣例知道是左上和右下的座標z 500.那麼掃瞄法求出平面的面積,在處理題目給出的每一層.求的體積 x用來離散化後作為橫軸建線段樹,z軸存下來列舉每乙個...
HDU3642 三維空間下的求體積並
這道題要求我們求得是在三維空間下 給定的n個長方體重疊三次以上的體積。而我們只需要先把z座標軸拿掉,求三次以上的體積,就是在二維平面上找到重疊三次的面積再乘以這段面積上 存在的z的長度即可得到這段體積.因此就把三維空間的問題轉化到二維空間處理 重點就是三次覆蓋情況下pushup函式的寫法 sum1代...
HDU1255 求覆蓋兩次及以上的矩形面積 掃瞄線
兩次的覆蓋不僅僅單獨的改變cnt的判斷條件 而是要進行討論,儘管現在只有1層標記或者沒有標記 仍然可能對當前做出貢獻 也就是 分情況討論 1.cnt 1 說明該區間被覆蓋兩次或以上,那麼長度就可以直接計算,就是該區間的長度,剩下的情況就是cnt 1或cnt 0 2.先看葉子節點,因為是葉子沒有孩子了...