HDU 3074 線段樹 模P乘法

2022-07-04 13:03:15 字數 1331 閱讀 2712

題目鏈結

題目大意:單點更新。維護序列乘法。mod 1000000007。

解題思路

1000000007*1000000007~10^18<9*10^18(int64)

所以單步模p乘法可以直接計算。

(a*b)%p=[(a%p)*(b%p)]%p,pushup維護即可。

query的rson的時候,要先判下lson是否存在,不存在ret=query(rson),否則ret=(query(lson)*query(rson))%p

#include "

iostream

"#include

"string

"#include

"vector

"#include

"cstring

"#include

"fstream

"#include

"cstdio

"using

namespace

std;

#define m 100005

#define lson l,mid,root<<1

#define rson mid+1,r,root<<1|1

#define ll long long

#define mod 1000000007ll ans[m

<<2

];void pushup(int

root)

void build(int l,int r,int

root)

int mid=(l+r)>>1

; build(lson);

build(rson);

pushup(root);

}void update(int p,int value,int l,int r,int

root)

int mid=(l+r)>>1

;

if(p<=mid) update(p,value,lson);

else

update(p,value,rson);

pushup(root);

}ll query(

int l,int r,int l,int r,int

root)

else ret=rr;

}return

ret;

}int

main()

if(cmd==0

) }}

return0;

}

線段樹高階 區間取模

題目要求的操作 1 區間求和 2 區間取模 3 單點修改 這道題目不要用到 lazy陣列,因為條件是單點修改,直接修改的葉子節點,其次區間取模操作直接可以暴力。a mod b分為兩種情況 1 a b 2 a b 對於第一種情況 我們不用操作,對自己大的數取模就是自己。第二種情況 取模操作後a的值至少...

hdu 預處理 線段樹)

給n個數,m個詢問,問任意區間內與其它數互質的數有多少個 比如3個數1 2 4,詢問 1,3 那麼答案是1 千萬要記住,這樣的題目,如果你不轉變下,使勁往線段樹想 雖然轉變之後,也說要用到線段樹,但是維護的東西不同了 那麼會發現這樣的題目,區間與區間之間是無法傳遞資訊的,區間與區間是無法傳遞資訊的,...

初步線段樹 hdu1166

include include includeusing namespace std define max 50000 struct node node maintree 4 max void settree int n,int l,int r int main printf case d n tt...