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個用空...