日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu3074 线段树求区间乘积(单点更新)

發(fā)布時間:2025/6/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu3074 线段树求区间乘积(单点更新) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:
? ? ? 給你n個數(shù),兩種操作,(1) 把第b個數(shù)改成c (2)算出b-c的乘積,結(jié)果對1000000007取余。

思路:

? ? ? 線段樹單點更新,簡單題目,不多解釋,具體看代碼。



#include<stdio.h>#define lson l ,mid ,t << 1 #define rson mid + 1 ,r ,t << 1 | 1 #define MOD 1000000007 __int64 sum[50000*4+100];void Pushup(int t) {sum[t] = ((sum[t<<1] % MOD) * (sum[t<<1|1] % MOD)) % MOD; }void BuidTree(int l ,int r ,int t) {sum[t] = 1;if(l == r){scanf("%I64d" ,&sum[t]);sum[t] %= MOD;return;}int mid = (l + r) >> 1;BuidTree(lson);BuidTree(rson);Pushup(t); }void Update(int l ,int r ,int t ,int a ,int b) {if(l == r){sum[t] = b % MOD;return;}int mid = (l + r) >> 1;if(a <= mid) Update(lson ,a ,b);else Update(rson ,a ,b);Pushup(t); }__int64 Query(int l ,int r ,int t ,int a ,int b) {if(a <= l && b >= r)return sum[t];int mid = (l + r) >> 1;__int64 ans = 1;if(a <= mid) ans = Query(lson ,a ,b) % MOD;if(b > mid) ans *= Query(rson ,a ,b) % MOD;return ans % MOD; }int main () {int t ,i ,n ,m ,a ,b ,c;scanf("%d" ,&t);while(t--){scanf("%d" ,&n);BuidTree(1 ,n ,1);scanf("%d" ,&m);while(m--){scanf("%d %d %d" ,&a ,&b ,&c);if(a) Update(1 ,n ,1 ,b ,c);else printf("%I64d\n" ,Query(1 ,n ,1 ,b ,c) % MOD);}}return 0; }

總結(jié)

以上是生活随笔為你收集整理的hdu3074 线段树求区间乘积(单点更新)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。