這道題要求我們求得是在三維空間下 給定的n個長方體重疊三次以上的體積。而我們只需要先把z座標軸拿掉,求三次以上的體積,就是在二維平面上找到重疊三次的面積再乘以這段面積上 存在的z的長度即可得到這段體積.
因此就把三維空間的問題轉化到二維空間處理
重點就是三次覆蓋情況下pushup函式的寫法:
sum1代表覆蓋一次,sum2兩次,sum3 三次及以上
1:cover標記是大於2的情況 那麼sum3就等於當前區間的長度,而sum1和sum2是等於0的因為此時沒有兩次以下的情況
2:cover標記正好覆蓋到2次,此時sum3等於左右子樹覆蓋三次加左右子樹覆蓋2次的長度再加上左右子樹覆蓋一次的長度,因為這些區間長度加上2都可以能滿足》=3,sum2等於當前區間的長度減去sum3(也就是大於等於3的)這一部分,sum1等於0
3:cover正好覆蓋一次,那麼sum3只能等於左右子樹覆蓋兩次的區間長度和三次的長度,sum2等於左右子樹覆蓋一次的長度,sum1等於當前區間長度減去覆蓋三次及以上和兩次的長度
4:cover等於0 所有sum 此時都只能由他的左右子樹來更新 也是就是都等於相對應的左右子樹的和
void
pushup
(int rt,
int l,
int r)
else
if(cover[rt]==2
)else
}else
if(cover[rt]==1
)else
}else
else
}}
ac**:
#include
using
namespace std;
typedef
long
long ll;
const
int maxn =
1e5+7;
//三維空間的求體積並 只需要把z軸離散化後 挨個列舉z軸的區間 然後就變成了傳統的二維空間的面積並
int sum1[maxn]
,sum2[maxn]
,sum3[maxn]
;int cover[maxn]
;int x[maxn]
,z[maxn]
;int n;
struct node
line[maxn]
;struct point
;struct node
cube[maxn]
;// 理解正確的多層面積的討論方式(思想)
void
init()
bool
cmp(node a,node b)
void
pushup
(int rt,
int l,
int r)
else
if(cover[rt]==2
)else
}else
if(cover[rt]==1
)else
}else
else}}
void
update
(int rt,
int l,
int r,
int ul,
int ur,
int x)
int mid =
(l+r)
>>1;
if(ul <= mid)
update
(rt<<
1,l,mid,ul,ur,x);if
(ur > mid)
update
(rt<<1|
1,mid+
1,r,ul,ur,x)
;pushup
(rt,l,r);}
intmain()
if(n <3)
sort
(x+1
,x+1
+cntx)
;sort
(z+1
,z+1
+cntz)
; cntx =
unique
(x+1
,x+1
+cntx)
-x-1
; cntz =
unique
(z+1
,z+1
+cntz)
-z-1
;// 列舉z座標 每次把在這個範圍內的矩形找出 每個迴圈中相當於做一次二維的掃瞄 就和前幾道題一樣了
for(
int i =
1;i < cntz;i ++)}
init()
;// 這個就相當於建樹 初始化了
sort
(line+
1,line+
1+tot,cmp)
; ll res =0;
for(
int k =
1;k < tot;k ++
) ans +
= res *
(z[i+1]
-z[i]);
}printf
("case %d: %lld\n"
,++cas,ans);}
return0;
}
三維空間剛體旋轉
剛體 運動過程中不會產生形變的物體,運動過程中同乙個向量的長度和夾角都不會發生變化。剛體變換也稱為歐式變換。旋轉矩陣 四元數旋轉向量 尤拉角安裝方式 eigen庫只有標頭檔案,沒有.so和.a二進位制檔案,所以在cmakelists.txt中只需要新增標頭檔案路徑,並不需要使用target link...
BFS 三維空間迷宮
題面 你被困在乙個三維的空間中,現在要尋找最短路徑逃生!空間由立方體單位構成。每次向上下前後左右移動乙個單位需要一分鐘,且不能對角線移動。空間的四周封閉。你的目標是走到空間的出口。問是否存在逃出生天的可能性?如果存在,則需要多少時間?輸入第一行是乙個數表示空間的數量。每個空間的描述的第一行為l,r和...
三維空間和四維空間
從螞蟻走路可以看出。由於螞蟻受限於自己的身體沒有翅膀,就跟人沒有翅膀一樣,碰到吊在自己頭頂的東西就只能繞遠路通過二維的方法到達三維的地方,所以只要有工具,可以是翅膀,可以是深深固定地上的梯子,也可以是飛機,都可以從受限的二維空間達到三維空間。而且這些手段全都是為了用來克服重力的,所以重力跟第三維有不...