12:Challenge 5(線段樹區間直接修改)
阿新 • • 發佈:2017-07-20
fin 所有 時間限制 hal 每一個 ++ ont bool nbsp
- 總時間限制:
- 10000ms
- 單個測試點時間限制:
- 1000ms
- 內存限制:
- 262144kB
- 描述
-
給一個長為N的數列,有M次操作,每次操作是以下兩種之一:
(1)將某連續一段同時改成一個數
(2)求數列中某連續一段的和
- 輸入
- 第一行兩個正整數N和M。
第二行N的整數表示這個數列。
接下來M行,每行開頭是一個字符,若該字符為‘M‘,則表示一個修改操作,接下來三個整數x、y和z,表示在[x,y]這段區間的數改為z;若該字符為‘Q‘,則表示一個詢問操作,接下來兩個整數x和y,表示求[x,y]這段區間的和。 - 輸出
- 對每一個詢問操作單獨輸出一行,表示答案。
- 樣例輸入
-
5 3 1 2 3 4 5 Q 1 5 M 2 3 2 Q 3 5
- 樣例輸出
-
15 11
- 提示
- 1<=N<=10^5,1<=M<=10^5,輸入保證合法,且所有整數及答案可用帶符號32位整型存儲。
- 對於線段樹的直接修改,
- 我們首先考慮要維護一個修改標記,
- 註意這個標記是可以每次被覆蓋的!
- 然後值直接區間修改就好
-
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define ls k<<1 5 #define rs k<<1|1 6 using namespace std;
12:Challenge 5(線段樹區間直接修改)