分析題意, 是一道典型的線段樹題目.
要求做到區間賦值(樹狀陣列應該無法做到), 區間求和兩個操作.
開始的時候思路不清楚, 後來要注意線段樹的 up 和 down 操作.
需要注意的是有lazy-tag的節點, 它本身的資訊是完全正確的, 子節點的資訊是待更新的.
這也就是說, 當需要用到這些子節點的資訊時在進行更新.
#include #include #include #include #include using namespace std;
const int maxn = 1e5 + 600;
int s[maxn << 2 | 1];
int flag[maxn << 2 | 1];
int n;
int ql, qh, v;
inline void up(int o)
inline void down(int o, int lo, int hi)
}void build(int o, int lo, int hi)
int mi = lo + (hi - lo >> 1);
build(o << 1, lo, mi);
build(o << 1 | 1, mi, hi);
up(o);
}int query(int o, int lo, int hi)
if(qh <= lo || hi <= ql)
return 0;
down(o, lo, hi);
int rst = 0, mi = lo + (hi - lo >> 1);
rst += query(o << 1, lo, mi);
rst += query(o << 1 | 1, mi, hi);
return rst;
}void modify(int o, int lo, int hi)
if(qh <= lo || hi <= ql)
return;
down(o, lo, hi);
int mi = lo + (hi - lo >> 1);
modify(o << 1, lo, mi);
modify(o << 1 | 1, mi, hi);
up(o);
}int main()
ql = 1, qh = n;
printf("the total value of the hook is %d.\n", s[1]);
return 0;
}
計蒜客 帕吉的肉鉤 區間更新 區間和
在dota遊戲中,帕吉的肉鉤是很多英雄最害怕的東西。鉤子由連續若干段的等長金屬棒製成。現在帕吉對鉤子由一些操作 我們將金屬棒1 n依次編號,帕吉可以把編號x y的金屬棒變成銅棒 銀棒 金棒。每段銅棒的價值是1 每段銀棒的價值是2 每段金棒的價值是3。肉鉤的總價值是n段金屬棒價值之和。帕吉想知道若干操...
計蒜客 項鍊 (主席樹 離線 樹狀陣列)
題目大意就跟洛谷的hh項鍊一樣,但是求一串區間內不重複數字的和。一種做法是離線 樹狀陣列,這裡不講。主要講一下新學習的技能,用主席樹搞區間內不重複的數字 個數或者和 由於洛谷那個寫炸了,一直mle 不知道被什麼資料卡了 只好拿計蒜客上面的題來試一下,結果計蒜客的能過。主席樹做法和樹狀陣列相同,對於同...
計蒜客 管家的忠誠 線段樹
老管家是乙個聰明能幹的人。他為財主工作了整整10年,財主為了讓自已賬目更加清楚。要求管家每天記k次賬,由於管家聰明能幹,因而管家總是讓財主十分滿意。但是由於一些人的挑撥,財主還是對管家產生了懷疑。於是他決定用一種特別的方法來判斷管家的忠誠,他把每次的賬目按1,2,3 編號,然後不定時的問管家問題,問...