題目:
整體二分,先把所有詢問都存下來;
然後二分乙個值,小於它的加到二維樹狀陣列的字首和裡,判斷一遍所有詢問,就分出了這些詢問的答案是否大於這個值;
然後分組遞迴下去求解即可;
注意加二維樹狀陣列的那個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...