p4224矩陣計數
時間限制 :- ms空間限制 :65536 kb
評測說明 :1s
問題描述
給出乙個n*m的方格矩陣,每個格仔裡都有乙個整數。你有兩種操作:
"1 x y k" 將座標為x,y的格仔的數字改為k;
"2 x1 y1 x2 y2 k"詢問滿足值為k且座標(x,y) x1<=x<=x2 ,y1<=y<=y2的格仔的數量
輸入格式
第一行,兩個整數n和m
接下來乙個n*m的整數矩陣,表示矩陣的初始情況。
接下來一行,乙個整數q,表示有q個操作:
操作1:"1 x y k" 將座標為x,y的格仔的數字改為k;
操作2:"2 x1 y1 x2 y2 k"詢問滿足值為k且座標x1<=x<=x2 ,y1<=y<=y2的格仔的數量
輸出格式
對於每個2號操作,輸出一行,乙個整數,表示查詢結果
樣例輸入 1
3 3
1 2 3
3 2 1
2 1 3
32 1 1 2 2 1
1 2 3 2
2 2 2 3 3 2
樣例輸出 1
1
2
樣例輸入 2
5 5
4 3 4 5 3
2 5 4 1 3
5 2 3 4 4
2 5 3 3 3
5 1 1 1 3
62 1 1 5 3 1
1 2 2 2
1 2 3 4
2 2 1 5 3 2
1 4 4 2
2 1 1 3 5 2
樣例輸出 2
2
43
提示
對於30%的資料:n,m<=30 q<=5000
對於100%的資料:
n,m<=300 q<=200000 k<=100
1<=x,x1,x2<=n 1<=y,y1,y2<=m x1<=x2 y1<=y2
** 改編自jsoi2009 count
這道題目的解法其實很暴力
我們知道在某乙個二維矩陣裡頭增加標記1時的操作和計數,就是使用二維樹狀陣列
那麼如何在乙個二維矩陣當中增加某乙個數字的標記呢??
我們就多開一維嘛
我們給每乙個數字開乙個二維矩陣,當原矩陣當中的某個位置是某個數字時,我們就在該數字的矩陣的相應位置標個1
例如
1 2 3
4 5 6
1 2 3
那麼對應的數字1的矩陣為
1 0 0
0 0 0
1 0 0
對應數字5的矩陣為
0 0 0
0 1 0
0 0 0
這個樣子,我們就能夠輕易地進行改動,操作與二維樹狀陣列的修改和統計操作基本相同
我們在修改某個位置的數字時,要先將該位置的原數字標記取消掉,在新增新的標記
例如
原矩陣
1 2 3
3 2 1
我們將3 1上的數字3修改為1
那麼 3的矩陣將由
0 0 1
1 0 0
變為0 0 0
1 0 0
1的矩陣將由
1 0 0
0 0 1
變為1 0 1
0 0 1
#include
#include
using
namespace
std;
int n,m;
int maps[345][345],c[123][312][312];
inline
int input()
int lowbit(int x)
void add(int x,int y,int num,int d)
int sum(int x,int y,int num)
int main()
t=input();
for(int i=1;i<=t;i++)
else
}return
0;}
NKOJ 3861 子矩陣(矩陣dp 單調佇列)
問題描述 小 a 有乙個 n m 的矩陣,矩陣中 1 n m 這 n m 個整數均出現過一次。現在小 a 在這個矩陣內選擇乙個子矩陣,其權值等於這個子矩陣中的所有數的最 小值。小 a 想知道,如果他選擇的子矩陣的權值為 i 1 i n m 那麼他選擇 的子矩陣可能有多少種?小 a 希望知道所有可能的...
NKOJ 4385 簡單計算(矩陣乘法)
問題描述 給你三個整數 n,x,和 m,計算 n k 1k xxk 輸入格式 一行,三個整數n,x,和 m,輸出格式 一行,乙個整數,表示計算結果 樣例輸入 1 100 1 10000 樣例輸出 1 樣例輸入 2 3 4 1000 樣例輸出 2 提示 1 n,m 2 10 9 1 x 50.注意到x...
題 矩陣乘法 NKOJ 3711 擺花
nkoj 3711 擺花 時間限制 ms 空間限制 65536 kb 評測說明 時限1000ms 問題描述 藝術館門前將擺出許多花,一共有n個位置排成一排,每個位置可以擺花也可以不擺花。有些花如果擺在相鄰的位置 隔著乙個空的位置不算相鄰 就不好看了。假定每種花數量無限,求擺花的方案數。輸入格式輸出格...