ZOJ 2859 二維線段樹

2021-06-23 03:47:48 字數 1299 閱讀 6368

思路:自己寫的第二發二維線段樹1a,哈哈,看來對二維的push操作比較了解了;但是還沒遇到在兩個線段樹中同時進行push操作的,其實這題我是想在x維和y維同時進行push操作的,但是想了好久不會,然後看到這題又給出10秒,然後想想在x維線段直接單點查詢肯定也過了,然後在第二維就只有pushup操作,在第一維線段樹沒有pushup操作。要是在第一維也有pushup操作的話,那就不用單點查詢那麼慢了。不過也a了,想找題即在二維同時進行pushup和pushdown操作的。

#include#include#include#include#include#include#include#include#include#define mem(a,b) memset(a,b,sizeof(a))

#define lson i<<1,l,mid

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

#define llson j<<1,l,mid

#define rrson j<<1|1,mid+1,r

#define inf 0x7fffffff

#define maxn 1010

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

int map[maxn][maxn],min[maxn][maxn];

int n,q,t,ans;

void pushup(int i,int j)

void build_y(int i,int u,int j,int l,int r)

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

build_y(i,u,llson);build_y(i,u,rrson);

pushup(i,j);

}void build_x(int i,int l,int r)

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

build_x(lson);build_x(rson);

}int query_y(int i,int j,int l,int r,int y1,int y2)

void query_x(int i,int l,int r,int x1,int x2,int y1,int y2)

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

if(x1<=mid) query_x(lson,x1,x2,y1,y2);

if(x2>mid) query_x(rson,x1,x2,y1,y2);

}int main()

}return 0;

}

二維線段樹

二維線段樹一般用樹套樹的方式實現,每個外層線段樹的節點對應一顆內層線段樹,整個線段樹存放在乙個二維陣列中。二維線段樹 poj2155 include include include include include include include include include include inc...

二維線段樹

二維線段樹矩陣區間查詢最大值 矩陣求和預處理後o 1 就能算出來,不用線段樹,除非有修改操作 先第一維在第二維,注意建樹有個順序問題,應該讓第一維度的先建完然後再建第二個維度 具體看 include include include using namespace std const int maxn...

二維線段樹

一維線段樹用來維護一維的空間,即乙個線段。二維線段樹用來維護二維的空間,即乙個矩形。二維線段樹的每個結點都是一棵一維線段樹,所以結構體陣列要開二維,再加上線段樹本身的性質,會占用很大記憶體,要儘量減少結構體內儲存的值的個數和長度,考慮到每個節點表示的線段的左右端點可以作為函式引數,所以不再儲存在結構...