HDU 4819 二維線段樹

2022-05-22 15:03:08 字數 1843 閱讀 2386

13年長春現場賽的g題,赤裸裸的二維線段樹,單點更新,區間查詢

不過我是第一次寫二維的,一開始寫t了,原因是我沒有好好利用行段,說白一點,還是相當於枚舉行,然後對列進行線段樹,那要你寫二維線段樹幹嘛

二維就是在每個行段也建一棵樹,來代表這個區間的行裡的某些列的值

其他操作倒是不難,因為有一維的功底,只是多寫乙個,刷刷刷就出來了

就是更新操作的時候有點麻煩,up函式不好寫,必須先更新底層,複層是區間值,無法先進行更新,然後底層向父層轉移也是有點小技巧,因為每個行段點裡面的某些列的列端點號肯定是相同的,比如 我dp[1][rt]和dp[2][rt],表示的都是同樣的列,只是乙個是兒子行,乙個是父親行,父親行是》兒子行的,所以更新到底層的時候,就往上每次對第一維除2來更新父節點的相關區域即可

還有發現這個不好直接複製,本題是維護最小值和最大值,在建樹的時候,直接修改不太好,先把所有的點的最大設定為-inf,最小設定為inf,這樣以修改的方式去賦初值,包括之後的修改也是這樣。

#include #include #include #include #define lson rt<<1,l,mid

#define rson rt<<1|1,mid+1,r

#define inf 1<<30

using namespace std;

const int n = 810;

int ds[n*3][n*3];

int db[n*3][n*3];

int flag[n*3][n*3];

int n;

int a[n][n];

struct node

;void up(int k,int rt)

}void buildc(int k,int rt,int l,int r)

int mid=(l+r)>>1;

buildc(k,lson);

buildc(k,rson);

}void buildr(int rt,int l,int r)

int mid=(l+r)>>1;

buildr(lson);

buildr(rson);

}node queryc(int k,int c1,int c2,int rt,int l,int r)

int mid=(l+r)>>1;

if (mid=c2)

else

}node queryr(int r1,int r2,int c1,int c2,int rt,int l,int r)

int mid=(l+r)>>1;

if (r2<=mid)

else

if (r1>mid)

else

}void fixc(int val,int k,int c,int rt,int l,int r)

return;

}int mid=(l+r)>>1;

if (c<=mid) fixc(val,k,c,lson);

else fixc(val,k,c,rson);

up(k,rt);

}void fixr(int val,int r,int c,int rt,int l,int r)

int mid=(l+r)>>1;

if (r<=mid) fixr(val,r,c,lson);

else fixr(val,r,c,rson);

}int main()

}int q,l,r,s;

scanf("%d",&q);

printf("case #%d:\n",++kase);

int r1,r2,c1,c2;

while (q--)

}return 0;

}

HDU 4819 Mosaic 二維線段樹

題目大意 裸題,不解釋,上模板。比較省記憶體的寫法 hdu 4819 pragma comment linker,stack 102400000,102400000 include include include include include include include include inc...

HDU 4819 Mosaic 二維線段樹

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

hdu4819 poj2019 二維線段樹

樹套樹 x線段樹的每乙個點都對應乙個y線段樹 這樣就形成了二維線段樹 二維線段樹最大的理解難點在於對點的push up,即由右往左更新和由下往上更新這兩個地方,還有就是x線段的每乙個點都對應乙個y線段樹 hdu 4819 include include include include include...