HDU 4819 Mosaic 二維線段樹

2021-06-25 09:30:27 字數 2372 閱讀 1076

【題目大意】

裸題,不解釋,上模板。

比較省記憶體的寫法:

/* hdu 4819 */

//#pragma comment(linker, "/stack:102400000,102400000")

#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define mp(x,y) make_pair((x),(y))

#define pb(x) push_back(x)

typedef __int64 ll;

//typedef unsigned __int64 ull;

/* ****************** */

const int inf = 1000111222;

const double inff = 1e100;

const double eps = 1e-8;

const ll mod = 10000000007ll;

const int nn = 810;

const int mm = 400010;

/* ****************** */

int m_a[nn*2][nn*2];

int m_i[nn*2][nn*2];

int ans_max, ans_min;

int x1, y1, x2, y2, x, y;

//為了函式的引數不過於冗雜,我把修改和查詢的變數改為全域性的

int col; //單點修改值,為了模板的移植性,把這個設定為全域性變數

inline int mid(int x,int y)

inline int loc(int l,int r)

inline int ls(int l,int r)

inline int rs(int l,int r)

void update1d(int st,int en,int l,int r)

//雖然這個在輔線段樹中是乙個點,但是在主線段樹中不是乙個點

//所幸的是,主線段中對應的下方節點是修改好了的,所以利用主線段樹修改

int r1_lson = ls(st, en);

int r1_rson = rs(st, en);

m_a[r1][r2] = max(m_a[r1_lson][r2], m_a[r1_rson][r2]);

m_i[r1][r2] = min(m_i[r1_lson][r2], m_i[r1_rson][r2]);

}else

}void update2d(int st,int en,int l,int r)

else

}void query1d(int st,int en,int l,int r)

else

}void query2d(int st,int en,int l,int r)

else

}int main()

scanf("%d", &m);

for (i = 0; i < m; i ++)

void update1d(int r1,int r2,int l,int r)

//雖然這個在輔線段樹中是乙個點,但是在主線段樹中不是乙個點

//所幸的是,主線段中對應的下方節點是修改好了的,所以利用主線段樹修改

m_a[r1][r2] = max(m_a[r1<<1][r2], m_a[r1<<1|1][r2]);

m_i[r1][r2] = min(m_i[r1<<1][r2], m_i[r1<<1|1][r2]);

}else

}void update2d(int r1,int st,int en,int l,int r)

else

}void query1d(int r1,int r2,int l,int r)

else

}void query2d(int r1,int st,int en,int l,int r)

else

}int main()

scanf("%d", &m);

for (i = 0; i < m; i ++)

{scanf("%d%d%d", &x, &y, &z);

x1 = max(1, x - z/2);

x2 = min(n, x + z/2);

y1 = max(1, y - z/2);

y2 = min(n, y + z/2);

ans_max = -inf;

ans_min = inf;

query2d(1, 1, n, 1, n);

// cout<<"max=="<

HDU 4819 Mosaic 二維線段樹

給定乙個 的矩陣,每個格仔都有乙個數,再給出 個詢問,每次詢問以 為中心的邊長為 的正方形矩陣中的最大值和最小值,並修改 的值為 四叉樹 對於查詢矩陣的最值 修改問題,考慮二維線段樹,參照一維線段樹的寫法 每次將區間二分成兩個子區間,對應矩陣應對 同時二分,也就是 個子矩陣,即左上 右上 左下,右下...

hdu4819 Mosaic 二維線段樹(樹套樹)

題目描述 原問題中拆分出來這樣的乙個問題 給定乙個n n的矩陣,查詢某一塊最大最小值,修改某乙個位置的值,運算元共有約1e5次 思路 二維的線段樹,寫法是樹套樹,其中修改操作略微複雜,大致可以表述為先 沿x軸生長,每生長一點,就沿著y軸延展 pragma warning disable 4786 p...

HDU 4819 二維線段樹

13年長春現場賽的g題,赤裸裸的二維線段樹,單點更新,區間查詢 不過我是第一次寫二維的,一開始寫t了,原因是我沒有好好利用行段,說白一點,還是相當於枚舉行,然後對列進行線段樹,那要你寫二維線段樹幹嘛 二維就是在每個行段也建一棵樹,來代表這個區間的行裡的某些列的值 其他操作倒是不難,因為有一維的功底,...