洛谷P1527 矩陣乘法 二維樹狀陣列 整體二分

2022-05-12 12:01:21 字數 1184 閱讀 7581

題目:

整體二分,先把所有詢問都存下來;

然後二分乙個值,小於它的加到二維樹狀陣列的字首和裡,判斷一遍所有詢問,就分出了這些詢問的答案是否大於這個值;

然後分組遞迴下去求解即可;

注意加二維樹狀陣列的那個nw是全域性變數,在不同的層中不停調整;

二分的範圍最好是mn-1到mx+1,不然有些詢問的ans會沒有賦上值。

**如下:

#include#include

#include

#include

using

namespace

std;

intconst maxn=505*505,maxm=60005

;int n,m,f[505][505

],nn,mx,mn,nw,ans[maxm],p[maxm],tmp[maxm];

bool

mk[maxm];

struct na[maxn];

struct qq[maxm];

bool cmp(n x,n y)

void add(int x,int y,int

val)

int query(int x,int

y)int ask(int

i)void solve(int l,int r,int l,int

r)

int l1=l-1,l2=l+cnt-1

;

for(int i=l;i<=r;i++)

for(int i=l;i<=r;i++)p[i]=tmp[i];

solve(l,l1,l,mid);solve(l1+1,r,mid+1

,r);

}int

main()

sort(a+1,a+nn+1

,cmp);

for(int i=1;i<=m;i++)

scanf(

"%d%d%d%d%d

",&q[i].x1,&q[i].y1,&q[i].x2,&q[i].y2,&q[i].k),p[i]=i;

solve(

1,m,mn-1,mx+1

);

for(int i=1;i<=m;i++)printf("

%d\n

",ans[i]);

return0;

}

洛谷 P1527 國家集訓隊 矩陣乘法

矩陣第k小 一道練習整體二分的比較好的題 這道題把序列查詢區間第 k 小搬到了矩陣上,但是仍然滿足二分性質,所以我們還是可以整體二分 而我們沿用序列上的做法,把點和詢問都離線下來,揉在一起整體二分 唯一不一樣的地方就是需要二維樹狀陣列,這個很好理解吧qwq 複雜度 o qlog 3n code in...

整體二分 二維BIT 洛谷 P1527

給出乙個500 500的矩陣,6e4次詢問,每次詢問乙個子矩陣第k小的數.將所有的值 修改 和查詢放入陣列,進行整體二分.對於當前區間使用二維bit維護任意區域內 mid的數的個數.因為整體二分的遞迴只與陣列 q 的下標範圍和答案範圍有關,所以本題除了把bit換成二維,其餘是不用更改的.考慮最後的狀...

矩陣乘法(二維陣列例題)

題目 程式設計求兩個矩陣相乘的結果。輸入第一行是整數m,n,表示第乙個矩陣是m行n列的。接下來是乙個m n的矩陣。再下一行的輸入是整數p,q,表示下乙個矩陣是p行q列 n p 再接下來就是乙個p行q列的矩陣。要求輸出兩個矩陣相乘的結果矩陣 1 m,n,p,q 8 輸入樣例 輸出樣例 2 3 10 1...