技巧-二維字首和(容斥)
問題描述:給定一個n行m列的矩陣a。
之後有許多查詢,每個查詢包括i,j,u,v四個數字,其中(i,j)表示一個矩陣的左上角,(u,v)表示一個矩陣的右下角。輸出這次查詢的矩陣內的和。
方法:先用n*m的時間求出二維字首和,之後每次查詢都是o(1)的時間複雜度。
首先我們定義一個sum[][]的二維陣列。sum[i][j]表示左上角為(1,1)右下角為(i,j)的矩陣內所有元素的和。
根據容斥定理,可以遞推求出所有sum[i][j]。
之後每次查詢,輸入i,j,u,v後,我們可以已經求得的sum陣列,根據容斥定理得到這個矩陣內所有元素的和為:for(int i = 1 ; i<=n ; i++){ for(int j = 1 ; j<=m; j++){ sum[i][j] = sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j]; } }
sum[u][v] - sum[i-1][v] - sum[u][j-1] + sum[i-1][j-1];
相關推薦
技巧-二維字首和(容斥)
問題描述:給定一個n行m列的矩陣a。 之後有許多查詢,每個查詢包括i,j,u,v四個數字,其中(i,j)表示一個矩陣的左上角,(u,v)表示一個矩陣的右下角。輸出這次查詢的矩陣內的和。 方法:先用n*m的時間求出二維字首和,之後每次查詢都是o(1)的時間複雜度。 首先我們定
容斥原理及二維字首和
先mk一個容斥原理詳解 容斥原理大概就是 : 要計算幾個集合並集的大小,我們要先將所有單個集合的大小計算出來,然後減去所有兩個集合相交的部分,再加回所有三個集合相交的部分,再減去所有四個集合相交的部分,依此類推,一直計算到所有集合相交的部分。 引用葉學
【HDU - 1559】最大子矩陣 (二維字首和裸題)
題幹: 給你一個m×n的整數矩陣,在上面找一個x×y的子矩陣,使子矩陣中所有元素的和最大。 Input 輸入資料的第一行為一個正整數T,表示有T組測試資料。每一組測試資料的第一行為四個正整數m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0
BZOJ 1218(二維字首和)
傳送門: 題面: 1218: [HNOI2003]鐳射炸彈 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4197 Solved: 1788 [Submit][Status][Discuss] Descriptio
codeforces 846D Monitor (二分+二維字首和)
Recently Luba bought a monitor. Monitor is a rectangular matrix of size n × m. But then she started to notice that some pixels cease to work prop
C語言 二維數組(指針)動態分配和釋放(轉)
i++ 進制 numbers 很多 print 算術 uil 換算 som C 二維數組(指針)動態分配和釋放 先明確下概念: 所謂32位處理器就是一次只能處理32位,也就是4個字節的數據,而64位處理器一次就能處理64位,即8個字節的數據。如果我們將總長128位的指令分別
二維字首和與差分
二維字首和 #include<bits/stdc++.h> #define REP(i, a, b) for(register int i = (a); i < (b); i++) #define _for(i, a, b) for(register int i = (a); i
廣場車神 二維字首和優化
題目 這一題相信大家都很快可以寫出無優化的DP,我們為了方便DP,換個思路,題目是從左下角出發到右上角,我們改一下,改成從左上角到右下角,我們可以發現這樣是不會對答案有任何影響的。我們定義狀態dp[i]
二維字首和詳解
這幾天在打比賽時遇到了二維字首和,看了一下深有體會,發一篇詳解。 首先,什麼是字首和?一個數列,我們要計算某個區間內的和,該怎麼做呢?正所謂暴力出奇跡,這一個也可以,我們暴力列舉每一個區間內的數並且相加,可是這個是O(n)的時間複雜度,不要小看這個線性,可如果在
【離散+二維字首和】Gym - 101991D - Dull Chocolates
題目連結<https://cn.vjudge.net/problem/2049045/origin> 題意: 在一個N*M的棋盤中,有K個白子,其他的都是黑子。問有多少個字首和矩陣包含奇數個白子,多少個包含偶數個白子。 (1≤N,M≤1e9,1≤K≤1e3).
BZOJ 1048: [HAOI2007]分割矩陣 記憶化搜尋,二維字首和
Description 將一個a*b的數字矩陣進行如下分割:將原矩陣沿某一條直線分割成兩個矩陣,再將生成的兩個矩陣繼續如此分割(當然也可以只分割其中的一個),這樣分割了(n-1)次後,原矩陣被分割成了n個矩陣。(每次分割都只能 沿著數字間的縫隙進行)原矩
多執行緒技術模擬平行計算之二:陣列字首和(Prefix Sum)
一、字首和(Prefix Sum)定義: 給定一個數組A[1..n],字首和陣列PrefixSum[1..n]定義為:PrefixSum[i] = A[0]+A[1]+...+A[i-1]; 例如:A[5,6,7,8] --> PrefixSum[5,11,18,26
(容斥)Codeforces Round #428 (Div. 2) D. Winter is here
who walk ++ 關系 queue 只需要 long iostream scanf D. Winter is here time limit per test 3 seconds memory limit per test 256 megabytes inpu
D. Unusual Sequences(容斥)
post name urn () con blog opened contest std D. Unusual Sequences 隔板法 + 容斥原理 1 //容斥(莫比烏斯反演) 2 #include <bits/stdc++.h> 3 usi
組隊賽Day1第一場 GYM 101350 G - Snake Rana (容斥)
所有 out 狀態 枚舉 put output 總數 highlight times 【題意】 給一個N×M的矩陣, K個地雷的坐標。求不含地雷的所有矩形的總數。 T組數據。 N M都是1e4,地雷數 K ≤ 20 Input 3 2 2
hdu 4135 a到b的範圍中多少數與n互質(容斥)
namespace rim 所有 += ont put contain 質因數 tor Co-prime 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=4135 input
二維碼生成(QRCode.js)
結果 phone rec max andro javascrip user doc area 什麽是 QRCode.js? QRCode.js 是一個用於生成二維碼的 JavaScript 庫。主要是通過獲取 DOM 的標簽,再通過 HTML5 Canvas 繪制而成,不依
Visible Trees HDU - 2841(容斥)
sca none show lowbit 條件 inf nbsp stdin open 對於已經滿足條件的(x1,y1),不滿足條件的點就是(n*x1,n*y1),所以要求的就是滿足點(x,y)的x,y互質,也就是gcd(x,y) == 1,然後就可以用之前多校的方法來做了
HDU 2841 Visible Trees(容斥)題解
color mod clu 問題 can scan 發現 質因數 get 題意:有一塊(1,1)到(m,n)的地,從(0,0)看能看到幾塊(如果兩塊地到看的地方三點一線,後面的地都看不到)。 思路:一開始是想不到容斥...後來發現被遮住的地都有一個特點,若(a,b)有gcd
HDU - 4336 (容斥)
std 代碼 fin ans fine 是不是 amp 期望 itl 題意:給你n個獎,每個機會只能中一個獎,中獎的概率分別是{p1,p2,p3......pn};並且這些獎是兩兩沒有交集。(pi*pj=0)問,需要多少次才能把所有獎都中完的期望值。 先來分析:中所有獎