直接暴力分割,在函式開頭檢測,不行就return。
三種條件分割(左,右,中間),只有在中間才分割。
以下是示例**(部分**,poj3468,ac)
#define ti tree[i];
struct node
void
print()
const};
const
int maxn =
100000+10
;node tree[maxn *4]
;int arr[maxn]
;#define ti tree[i]
void
push_up
(int i)
void
push_down
(int i)
}void
build
(int i,
int l,
int r)
int mid =
(l + r)/2
;build
(i *
2, l, mid)
;build
(i *2+
1, mid +
1, r)
;push_up
(i);
}void
update
(int i,
int ul,
int ur,
int val)
int mid =
(ti.l + ti.r)/2
;if(ur <= mid)
else
if(ul > mid)
else
}long
long
query
(int i,
int ql,
int qr)
int mid =
(ti.l + ti.r)/2
;if(qr <= mid)
else
if(ql > mid)
else
}void
print
(int i,
int l,
int r)
}
順序有影響的例子:區間塗色以下是示例**(部分**,poj3468,ac)順序沒有影響的例子:區間和
#define ti tree[i];
struct node
void
print()
const};
const
int maxn =
100000+10
;node tree[maxn *4]
;int arr[maxn]
;#define ti tree[i]
void
push_up
(int i)
void
push_down
(int i)
}void
build
(int i,
int l,
int r)
int mid =
(l + r)/2
;build
(i *
2, l, mid)
;build
(i *2+
1, mid +
1, r)
;push_up
(i);
}void
update
(int i,
int ul,
int ur,
int val)
else
int mid =
(ti.l + ti.r)/2
;if(ur <= mid)
else
if(ul > mid)
else
}long
long
query
(int i,
int ql,
int qr)
int mid =
(ti.l + ti.r)/2
;if(qr <= mid)
else
if(ql > mid)
else
}void
print
(int i,
int l,
int r)
}
一些關於線段樹的操作記錄
由於筆者本身總是弄不清楚線段樹的各種寫法之間的差異,故寫在這裡方便看懂題解 關於可持久化 關於各種玩意兒套線段樹 關於離散化 關於卡常 關於遞迴 關於權值線段樹 1.分三種情況遞迴的 完全在左子樹,完全在右子樹,和兩邊都有的 複雜度證明 兩邊都有的情況顯然只會出現一次,而樹高為log n log n...
前端和後端互動的一些細節
scrat小白一枚,此篇文章感覺收穫很大,分享給大家 原創主人 1.前端請求資料url由誰來寫?在開發中,url主要是由後台來寫的,寫好了給前端開發者.如果後台在查詢資料,需要借助查詢條件才能查詢到前端需要的資料時,這時後台會要求前端提供相關的查詢引數,這裡的查詢引數也就是url請求的引數。2.介面...
ACM走過的坑和一些細節
1.一道簡單計算幾何,區域性變數與全域性變數同名,然後忘記在函式內宣告區域性變數,然後編譯通過了。2.省賽選拔時,一道二分 bfs走迷宮的題,漏了起點和終點重合的情況,要注意一開始入隊的狀態是否是結束狀態。3.線段樹的一道題,len陣列記錄根節點所代表線段覆蓋的長度,有小數,改來改去,根本沒注意到l...