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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二维树状数组模板(区间修改+区间查询)

發布時間:2023/12/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二维树状数组模板(区间修改+区间查询) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二維樹狀數組模板(區間修改+區間查詢)

例題:JOIOI上帝造題的七分鐘
一共兩種操作:

\(L\ x_1\ y_1\ x_2\ y_2\ d\):把\((x_1,y_1)\)\((x_2,y_2)\)這個矩形內所有元素加\(d\)。
\(k\ x_1\ y_1\ x_2\ y_2\):查詢\((x_1,y_1)\)\((x_2,y_2)\)這個矩形內所有元素的和。

代碼如下:

#include<bits/stdc++.h> #define RG register #define IL inline #define _ 2050 #define ll long long //#define ll int using namespace std;ll n , m , c1[_][_],c2[_][_],c3[_][_],c4[_][_] ;IL void upt(ll x , ll y , ll dt){for(RG int i = x; i <= n; i += (i & -i) )for(RG ll j = y; j <= m; j += (j & -j)){c1[ i ][ j ] += dt ;c2[ i ][ j ] += dt * y;c3[ i ][ j ] += dt * x;c4[ i ][ j ] += dt * x * y;} } IL ll calc(ll x,ll y){RG ll res = 0;for(RG ll i = x; i > 0; i -= (i & -i))for(RG ll j = y; j > 0; j -= (j & -j)){res = res+ (x + 1) * (y + 1) * c1[ i ][ j ]- (x + 1) * c2[ i ][ j ]- (y + 1) * c3[ i ][ j ]+ c4[ i ][ j ] ; }return res; }IL void add(ll X1,ll Y1,ll X2,ll Y2,ll dt){upt(X1 , Y1 , dt ) ;upt(X2 + 1 , Y1 , -dt ) ;upt(X1 , Y2 + 1, -dt ) ;upt(X2 + 1, Y2 + 1, dt ) ; } IL ll query(ll X1,ll Y1,ll X2,ll Y2){returncalc(X2 , Y2) + calc(X1 - 1, Y1 - 1) -calc(X1 - 1 , Y2) - calc(X2 , Y1 - 1) ; }int main(){ll X1 , X2 , Y1 , Y2 , z; char c[3]; scanf("X %lld %lld",&n,&m);while(scanf("%s",c)!=EOF){scanf("%lld%lld%lld%lld", &X1, &Y1, &X2, &Y2);if(c[0]=='L'){scanf("%lld", &z);add(X1 , Y1 , X2 , Y2 , z);}else printf("%lld\n",query(X1 , Y1 , X2 , Y2 ));}return 0;return 0;}

轉載于:https://www.cnblogs.com/Guess2/p/8459568.html

總結

以上是生活随笔為你收集整理的二维树状数组模板(区间修改+区间查询)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。