P3373 模板 線段樹 2

2022-02-17 15:58:34 字數 1064 閱讀 5332

傳送門

一道板子題,思路和一基本沒什麼區別只是操作變了。話不多說上**。

注意一下:這是大佬交給我們的指標寫法,雖然不好理解但是比陣列簡潔方便容易錯

宣告:**和hwh的線段樹一樣,因為是他幫我修改的。

#includeconst

int 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項的初始值。接下來...