1.非遞迴的矩陣二分乘法
#include #include #define mod 10000
#define length 2
//矩陣p*q,並將結果存放到p中
void matrix_mul(int p[length][length],int q[length][length])
; //中間陣列
for (int i=0;i0)
matrix_mul(p,p); //如果是偶數次,則縮減一半,並把計算的結果放在p中
n>>=1;
} for (int i=0;i#include #include #define mod 10000
#define length 2
//矩陣p*q,並將結果存放到p中
void matrix_mul(int p[length][length],int q[length][length])
; for (int i=0;i}
} for (int i=0;i}//計算矩陣p的n次方,使用二分矩陣乘法
void matrix_cal(int p[length][length],int n)
; for (int i=0;iif (n==1)
else if (n&1) //n是奇數
else //n是偶數 }
int main()
, };
matrix_cal(matrix, k-1);
printf("%d\n", (a1 * matrix[0][0] + a0 * matrix[0][1]) % mod);
} } return 0;
}
BZOJ 2738 矩陣乘法 整體二分
題目大意 給出乙個n n的矩陣,每次詢問乙個子矩形的第k小數。整體二分即在二分答案的同時把詢問分到兩個集合中再分別二分直到每個詢問出解。相當於把多個詢問一起二分 如何判斷乙個數x是不是k小呢 把矩陣中的小於等於x的數設為1,大於x的數設為0,求詢問矩陣中的小於等於x的數有多少個,大於等於k說明x有可...
BZOJ 2738 矩陣乘法 整體二分
給你乙個n n的矩陣,不用算矩陣乘法,但是每次詢問乙個子矩形的第k小數。愚蠢的名字.整體二分,影響因子就是矩陣裡的數 把 le mid 的矩陣元素加到二維樹狀陣列裡然後詢問分成兩組就行了 可以把矩陣元素權值排序後直接二分矩陣元素而不是值 複雜度 o nlog 3n 用排序代替一維樹狀陣列理論上更快,...
bzoj2738 矩陣乘法 整體二分
題意 求出子矩陣 k 小值。果然除了最小割題面給什麼演算法不能用什麼演算法 實際上區間 k 大值離線通解大概就是整體二分吧 二分最大值和最小值,動態維護,如果這個區間有這麼多個小於它的數,就設為 mid 接下來繼續遞迴修改。1 include 2 include 3 include 4 includ...