在dota遊戲中,帕吉的肉鉤是很多英雄最害怕的東西。鉤子由連續若干段的等長金屬棒製成。
現在帕吉對鉤子由一些操作:
我們將金屬棒1~n依次編號,帕吉可以把編號x~y的金屬棒變成銅棒、銀棒、金棒。
每段銅棒的價值是1;每段銀棒的價值是2;每段金棒的價值是3。
肉鉤的總價值是n段金屬棒價值之和。帕吉想知道若干操作以後鉤子的總價值。
輸入格式
第一行乙個整數n(1≤n≤105),表示肉鉤金屬棒的數量,初始狀態為銅棒。
第二行乙個整數q(1≤q≤105),表示運算元。
接下來q行,一行三個整數,x,y,z(1≤x≤y≤n,1≤z≤3)。
輸出格式
一行乙個整數,表示鉤子的總價值,用樣例中的格式。
**:
#includeusing namespace std;
int n,q;
const int max_n = 1e5+5;
int s[4 * max_n],col[4 * max_n];
//父節點合併
void up(int p)
//向下更新一層 區間更新使用延遲更新的思想提高效率
void down(int p, int l, int r)
}//更新
void modify(int p,int l,int r,int x,int y,int v)
down(p, l, r);//向下更新一層
int mid = (l + r)/2;
if(x <= mid)
if(y > mid)
up(p);
}//查詢
int query(int p,int l,int r,int x,int y)
down(p,l,r);//如果沒有return,這時子節點必須更新了 就向下更新一層
int mid = (l + r) / 2, res = 0;
if(x <= mid)
if(y > mid)
return res;
}int main()
while(q--)
cout<
return 0;
}
計蒜客 樹狀陣列線段樹 帕吉的肉鉤
分析題意,是一道典型的線段樹題目.要求做到區間賦值 樹狀陣列應該無法做到 區間求和兩個操作.開始的時候思路不清楚,後來要注意線段樹的 up 和 down 操作.需要注意的是有lazy tag的節點,它本身的資訊是完全正確的,子節點的資訊是待更新的.這也就是說,當需要用到這些子節點的資訊時在進行更新....
計蒜客 區間包含 活動安排問題
已知 n 個左閉右開區間 a b 對其進行 m 次詢問,求區間 l r 最多可以包含 n 個區間中的多少個區間,並且被包含的所有區間都不相交。輸入格式 輸入包含多組測試資料,對於每組測試資料 第一行包含兩個整數 n m 1 n m 100000 接下來 n 行每行包含兩個整數 a b 0 a b 1...
計蒜客 合併石子 區間dp
題目鏈結 題解 leetcode裡面有個戳氣球的題和這個類似,用區間dp來解。由於n堆 n 2 石子合併,最終一定會有個只剩2堆石子的中間狀態,這個狀態就是突破口。最終的2堆石子一定是在原來的石子裡面連續的,可以用dp i j 表示區間i.j的石子合併後最小的體力消耗,n堆石子消耗的最小體力為dp ...