給定乙個 n×m 的矩陣,以及 q 次詢問,每次詢問包括 4 個值分別為 a,b,c,d 代表著左上角為(a,b)右下角為(c,d)的子矩陣,求在這個子矩陣中的中位數是多少,若矩陣中的個數為偶數個,則取中間偏小的數。如矩陣中的數為 1,2,3,4,那麼答案是 2
輸入格式
一行乙個整數 tt(1< t< 100)代表 tt 組資料
第二行三個整數 n,m,q(1≤n,m≤100,1≤q≤100000)代表矩陣的行列以及詢問次數。其中對於所有資料 n×m 的總和不超過 3e5,qq 的總和不超過 1e6
接下來 n 行 m 個數 aij 代表初始矩陣中的元素(1≤aij≤500)
最後 q 行,每行 4 個整數 a,b,c,d,(1≤a≤c≤n,1≤b≤d≤m)
輸出格式
每組資料輸出 q 行每行乙個答案
輸出時每行末尾的多餘空格,不影響答案正確性
樣例輸入
1
5 5 2
5 4 3 2 1
10 11 12 13 25
9 8 7 6 14
15 16 17 18 19
24 23 22 21 20
5 1 5 5
2 1 5 5
樣例輸出
22
15
二分
ch[v][i][j],ij子矩陣中值小於等於v的個數
#includeusing namespace std;
const int inf=0x3f3f3f3f,mod=1e9+7,maxn=102;
#define lowbit(x) ((x)&(-x))
#define init(arr,val) memset(arr,val,sizeof(arr))
typedef long long ll;
int a[maxn][maxn],ch[501][maxn][maxn],n,m,q;
bool vis[501];
void get(int k)
}}int x,y,xx,yy;
int check(int ans)
int main()
}else
}printf("%d\n",r);}}
return 0;
}
中位數的中位數
參照王曉東的演算法設計 中位數的中位數,即將一串數分成n段,求其排好序了的中間那個數,再把這些所有中位數再求一次中位數。for int i 0 i r p 4 5 i 找中位數的中位數,r p 4即上面所說的n 5 int x lineselect a,p,p r p 4 5,r p 4 10 線性...
BFPRT(中位數的中位數)演算法
又稱為 中位數的中位數演算法 該演算法由 blum floyd pratt rivest tarjan 在1973年提出,最壞時間複雜度為o n 最差的空間複雜度為o logn 演算法步驟 1 將 n 個元素劃分為 n 5 個組,每組 5 個元素,若有剩餘,捨去 2 使用排序方法找到 n 5 個組中...
hive 中位數 Hive的中位數
關於求解中位數,我們知道在python中直接有中位數處理函式 mean 比如在python中求解乙個中位數,很簡單。python計算中位數 import numpy as np nums 1.1,2.2,3.3,4.4,5.5,6.6 均值np.mean nums 中位數 np.median num...