傳送門
一道板子題,思路和一基本沒什麼區別只是操作變了。話不多說上**。
注意一下:這是大佬交給我們的指標寫法,雖然不好理解但是比陣列簡潔方便容易錯
宣告:**和hwh的線段樹一樣,因為是他幫我修改的。
#includeconstint maxn=100005
;int
p;typedef
long
long
intll;
intn,q,m;
ll a[maxn];
struct
node
inline
void maketag2(const
ll w)
inline
void
pushup()
inline
void
pushdown()
node(
const
int l,const
intr)
else
}inline
bool inrange(const
int l,const
int r)
inline
bool outofrange(const
int l,const
int r)
void upd1(const ll l,const ll r,const
ll w)
else
if(!outofrange(l,r))
}ll qry(
const
int l,const
intr)
void upd2(const
int l,const
int r,const
ll w)
else
if(!outofrange(l,r))
}};int
main()
else
if(o==2
)
else
}return0;
}
P3373 模板 線段樹2
如題,已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 include include using namespace std const int maxn 100005 int n,m,p long long arr maxn...
P3373 模板 線段樹 2
ac 這裡的延遲標記要開兩個,分別記錄加法的值和乘法的值,但是乘法和加法的優先順序不一樣,不規定他們的順序的話會有錯誤,所以可以規定乘法優先,即規定好該結點的值等於該節點的值 父節點的乘法延遲標記的值 父節點加法延遲標記的值 區間長度,即,sum num 2 sum num 2 add num wc...
P3373 模板 線段樹 2
題目描述 如題,已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 輸入格式 第一行包含三個整數n m p,分別表示該數列數字的個數 操作的總個數和模數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來...