HDU2795 靈活的線段樹求區間最大值

2021-08-19 14:06:51 字數 820 閱讀 4552

這個題一開始有點傻,用的求和的線段樹,多了很多無用的查詢步驟,然後超時,然後優化了好久才想起來用區間最大值可以避免很多無用查詢層次,然後重寫。

經過不斷的改寫,重寫,初步掌握線段樹的靈活飄逸的**風格。

code:

#include

#include

#include

#include

#include

using

namespace

std;

#define lson l,m,rt<<1

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

const

int maxn=200100;

int sumtree[maxn<<2];

void pushup(int rt)

void build(int w,int l,int r,int rt)

int m=(l+r)/2;

build(w,lson);

build(w,rson);

pushup(rt);

}void updateandquery(int w,int l,int r,int rt)

int m=(l+r)/2;

if(w<=sumtree[rt<<1])

else

if(w<=sumtree[rt<<1|1])

pushup(rt);

//printf("sum[%d]=%d",rt,sumtree[rt]);

}int main()

}return

0;}

hdu 2795 線段樹(縱向)

注意h的範圍和n的範圍,縱向建立線段樹 題意 h w的木板,放進一些1 l的物品,求每次放空間能容納且最上邊的位子 思路 每次找到最大值的位子,然後減去l 線段樹功能 query 區間求最大值的位子 直接把update的操作在query裡做了 3 5 524 3331 213 1 2015 05 1...

hdu 2795(線段樹的應用)

hdu 2795 1 思路 每個格仔的寬度都已經確定,所以一開始預設已知所有的格仔,建立線段樹,單點更新區間值 x位置的點,因為線段樹的結構類似二叉樹,所以可以將線段樹看做乙個類二叉樹,每次x先找左區間 先找下標小的區間 否則找右的區間,遞迴縮小區間,最終修改最接近x且最靠前的 點的值。2 注意 這...

hdu 2795 線段樹更新單個節點

題意 給你乙個高位h寬為w的木板,現在給你一些通知條高度為1,寬度為wi,現在要盡可能的將每乙個通知條往木板的最上層放,並盡量向當前層的左邊放 從最高層到最低層的按1 min h,n 開始編號 對於每輸入的乙個紙條輸出其可以擺放的最高層次,若該紙條不能被放,那麼輸出 1 分析 由於h和w均為10 9...