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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

#135. 二维树状数组 3:区间修改,区间查询

發(fā)布時(shí)間:2025/3/14 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 #135. 二维树状数组 3:区间修改,区间查询 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

這是一道模板題。

給定一個(gè)大小為?N \times MN×M?的零矩陣,直到輸入文件結(jié)束,你需要進(jìn)行若干個(gè)操作,操作有兩類:

  • 1 a b c d x,表示將左上角為?(a,b)(a,b),右下角為?(c,d)(c,d)?的子矩陣全部加上?xx;

  • 2 a b c d,表示詢問左上角為?(a,b)(a,b),右下角為?(c,d)(c,d)?為頂點(diǎn)的子矩陣的所有數(shù)字之和。

輸入格式

第一行一個(gè)字符和兩個(gè)正整數(shù) ,其中?n,mn,m?分別表示矩陣的行數(shù)與列數(shù)。

接下來若干行直到文件結(jié)束,均代表你需要進(jìn)行的操作。

輸出格式

對于每個(gè)?2?操作,輸出一行代表查詢的結(jié)果。

樣例

樣例輸入

4 4 1 1 1 3 3 2 1 2 2 4 4 1 2 2 2 3 3

樣例輸出

12

數(shù)據(jù)范圍與提示

對于?10\%10%?的數(shù)據(jù),1 \le n,m \le 161n,m16,操作不超過?200200?個(gè);
對于?60\%60%?的數(shù)據(jù),1 \le n,m \le 5121n,m512;
對于?100\%100%?的數(shù)據(jù),1 \le n,m \le 2048,\lvert x \rvert \le 5001n,m2048,x500,操作不超過?2\times 10^52×105?個(gè),保證運(yùn)算過程中及最終結(jié)果均不超過?6464?位帶符號整數(shù)類型的表示范圍,并且修改與查詢的子矩陣存在。

#include<bits/stdc++.h>using namespace std; const int N=2100; long long s1[N][N],s2[N][N],s3[N][N],s4[N][N]; int n,m; int lowbit(int x) {return x&(-x); }void updata(int x,int y,long long z) {for(int i=x;i<=n;i+=lowbit(i)){for(int j=y;j<=n;j+=lowbit(j)){s1[i][j]+=z;s2[i][j]+=x*z;s3[i][j]+=y*z;s4[i][j]+=x*y*z;}} } long long sum(int x,int y) {long long res=0;for(int i=x;i>0;i-=lowbit(i)){for(int j=y;j>0;j-=lowbit(j)){res+=(x+1)*(y+1)*s1[i][j]-(y+1)*s2[i][j]-(x+1)*s3[i][j]+s4[i][j];}}return res; } int main() {while(scanf("%d %d",&n,&m)==2){memset(s1,0,sizeof(s1));memset(s2,0,sizeof(s2));memset(s3,0,sizeof(s3));memset(s4,0,sizeof(s4));int k;while(scanf("%d",&k)==1){if(k==1){int a,b,c,d;long long x;scanf("%d %d %d %d %lld",&a,&b,&c,&d,&x);updata(a,b,x);updata(c+1,b,-x);updata(a,d+1,-x);updata(c+1,d+1,x);}else{int x1,y1,x2,y2;scanf("%d %d %d %d",&x1,&y1,&x2,&y2);printf("%lld\n",sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1));}}}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/chenchen-12/p/10189009.html

總結(jié)

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

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