思路:
維護兩個樹狀陣列,乙個記錄種樹區間左端點,乙個記錄右端點。
每次詢問查詢「看不見的樹區間」,即右端點小於查詢區間左端點和左端點小於查詢區間右端點。
1 #include2 #include3 #include4 inline intgetint()
11const
int n=50001;12
intn;
13class
fenwicktree
19public:20
fenwicktree()
23void modify(int
p) 28}29
int query(int
p) 35
return
ans;36}
37};
38 fenwicktree t[2
];39
intmain()
48if(op==2
) 51}52
return0;
53 }
tyvj1473 校門外的樹3
tyvj1473 這道題可以用兩個樹狀陣列來做把每次更新的端點分別插入兩個樹狀陣列,在查詢區間時,之前更新的區間會對當前查詢區間產生影響的條件是 更新的末端點大於查詢的始端點且更新的始端點小於等於查詢的末端點,那麼由於如果某次更新的始端點大於查詢的末端點,那麼這次更新的末端點也大於查詢的末端點 因而...
JoyOI1473 校門外的數3 (線段樹)
題意很簡單 一開始想用乙個bitset維護,明顯這個是超記憶體的。但是我為什麼還要寫 然後想了一下,能不能維護每次種樹的左右區間來寫,然而發現並不行。接著想,維護種類和維護區間沒辦法了,能不能在種樹的次數上下功夫呢?我想維護乙個種了樹和沒種樹的線段樹,詢問就是查詢區間內中了樹的最大值和沒種樹的最小值...
校門外的樹(3)
校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的 如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作 k 1,讀入l,r表示在l r之間種上的一種樹 k 2,讀入l,r表示詢問l r之間能見到多少種樹 l,r 0 這道題暴力線段樹無法維護...