題意:有h×w大的公告板。有n條公告要寫入,每條公告高度都是1,寬度是wi,每次從最上最左的空位寫,假設有空位輸出第幾行。假設沒有足夠空位輸出-1。
題解:注意h最大1e9。但事實上是看n的大小。由於假設有n條公告最多佔n行,所以線段樹最大是min(h,n)。
#include #include #include using namespace std;
const
int n = 200005;
int h, w, n, sum[n << 2];
void pushup(int k)
void build(int k, int
left, int
right)
intmid = (left + right) / 2;
build(k * 2, left, mid);
build(k * 2 + 1, mid + 1, right);
pushup(k);
}int query(int k, int
left, int
right, int x)
intmid = (left + right) / 2, res = -1;
if (sum[k * 2] >= x)
res = query(k * 2, left, mid, x);
else
if (sum[k * 2 + 1] >= x)
res = query(k * 2 + 1, mid + 1, right, x);
pushup(k);
return res;
}int main()
}return 0;
}
hdu 2795 單點更新
題意 有乙個公告欄,h m的,給定n個操作,對於每乙個操作給定乙個數wi,表示有乙個通知的大小是1 wi的,每次對於這種操作將這個通知放在盡可能上面盡可能左邊的位置中去。思路 有h行,將每一行初始為m,表示還有m個空位可以放,那麼運用一棵線段樹來記錄下,行之間的區間最大值,就是可以放下的最大值。對於...
HDU 2795 單點更新 區間最值
hdu 2795 這題有點特殊,要在查詢的時候更新,而且 因為是找最小的行數,所以非左即右,優先考慮左 存在解情況下 ac code include include include include includeusing namespace std define debug 0 define in...
HDU2795(線段樹 單點更新 思維)
題目鏈結 題目大意 給乙個h高,w寬的廣告牌,以及n條廣告的寬度,每條廣告的高度預設為1,問n條廣告能插上的話所在的最高行數,插入不了輸入 1.解題思路 比較容易到用mlen維護區間h能夠裝下的最長廣告的長度 未插入 n在2e5內,所以線段樹最多就開8e5就足夠了!之後單點更新的時候順帶返回下標。c...