洛谷3373 線段樹2(線段樹)

2021-08-29 22:40:40 字數 1047 閱讀 1783

rt,就是線段樹的模板,支援區間乘、區間加、區間求和。

很有意思的一點是兩個標記的下傳,解決了就行了。

然後這道題,作為ahoi,竟然是個裸的模板!(可能年份久遠的原因吧。。。)兩個一毛一樣嘛!

#includeusing namespace std;

typedef long long ll;

const ll maxn=5e5+10;

struct treetr[maxn<<2];

ll n,q,mod;

ll a[maxn];

ll read()

void sc(ll x)

void push_up(ll root)

void push_down(ll root)

}void build(ll root,ll l,ll r)

ll mid=l+r>>1;

build(root<<1,l,mid);

build(root<<1|1,mid+1,r);

push_up(root);

}void update1(ll root,ll l,ll r,ll l,ll r,ll key)

ll mid=l+r>>1;

if(r<=mid)

update1(root<<1,l,mid,l,r,key);

else

push_up(root);

}void update2(ll root,ll l,ll r,ll l,ll r,ll key)

ll mid=l+r>>1;

if(r<=mid)

update2(root<<1,l,mid,l,r,key);

else

push_up(root);

}ll query(ll root,ll l,ll r,ll l,ll r)

}int main()

else

else

sc(query(1,1,n,l,r)%mod),puts("");

} }return 0;

}

洛谷 3373 線段樹

傳送門 思路 關鍵在於乘與加的先後計算關係,x y k x k y k,從這裡可以看出來,把加法轉化為乘法計算,取消了 與 先後順序 pushdown時,即為乘法標記 原有資料 加法標記 長度。注意點 這個題資料範圍取long long 讀入的k也是long long,傳入函式時用long long...

線段樹2 洛谷p3373 線段樹

題目位址 解釋 多了乙個乘法操作,可以考慮優先順序。每次先算乘法。首先,對於乙個區間 和為s 假設已經按 a 乘b進行了操作。值得到的值為 s a b sb ab 假設先乘得到 sb a 這樣相比,add應該還要再乘上乙個b才對,所以,當更新到乙個區間時,為了進行先乘的操作而不讓結果發生變化,應該將...

洛谷 P3373 線段樹 2

作為一道調了三天的模板題,真的太虐心了對於理解線段樹大有用處。傳送門如題,已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 輸入格式 第一行包含三個整數n m p,分別表示該數列數字的個數 操作的總個數和模數。第二行包含n個用空...