p3373
思路學習於:xtyf_cky 的部落格
看了這個線段樹裸題,竟然一時半會寫不出,果然線段樹水平還是太菜太菜了,學習了上面這位大佬後,讓我對lazy更新有了新的認識,之前我自己手寫lazy時,也想到了查詢的時候也要標記傳遞,但終歸水平太菜,沒有完善出來,這個題呢,又有加法又有乘法,但是我可以把乘法和加法處理一下,使得乘法可以優先,比如(2+x)*2我可以轉化成2*x+4,這樣就可以無所畏懼的同時處理這兩個lazy標記而不用擔心他們互相影響了。
#includeusing namespace std;
typedef long long ll;
const int maxn=1e5+10;
ll sum[maxn*4],add[maxn*4],mul[maxn*4],mod,v;
void pushdown(int o,int ls,int rs,int l,int m,int r)
void up(int o,int l,int r,int ql,int qr,int op)
else
return;
} if(ql<=m)up(ls,l,m,ql,qr,op);
if(qr>m)up(rs,m+1,r,ql,qr,op);
sum[o]=(sum[ls]+sum[rs])%mod;
}ll qu(int o,int l,int r,int ql,int qr)
int main()
while(q--)
else printf("%lld\n",qu(1,1,n,x,y));
}}
洛谷P3373 模板 線段樹2
這題有毒啊,敲了我一晚上加一早上,總算a了。由於有加和乘兩個操作,要用2個lazy陣列。核心難點就是2個lazy陣列會相互影響。因為乘影響加,加不影響乘,所以我們先算乘。include include include include include include include include i...
洛谷 P3373 模板 線段樹 2
如題,已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 第一行包含三個整數n m p,分別表示該數列數字的個數 操作的總個數和模數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含3或4個...
線段樹(洛谷P3373模板2)
日常膜拜dalao 財神萬歲!話說這個線段樹今天折磨了我五個小時然後終於發現少打了乙個2.離開學還有4天然而作業一字未動絲毫不慌 ing 原題連線 洛谷線段樹模板2 要求 如題,已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 ...