HDU2795 Billboard
生活随笔
收集整理的這篇文章主要介紹了
HDU2795 Billboard
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:http://acm.hdu.edu.cn/showproblem.php?pid=2795
?
?
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 #define lson l,m,rt<<1 5 #define rson m+1,r,rt<<1|1 6 const int maxn = 222222; 7 int MAX[maxn << 2]; 8 int h, w, n; 9 void pushup(int rt) 10 { 11 MAX[rt] = max(MAX[rt << 1], MAX[rt << 1 | 1]); 12 } 13 void build(int l, int r, int rt) 14 { 15 MAX[rt] = w; 16 if (l == r) return; 17 int m = (l + r) >> 1; 18 build(lson); 19 build(rson); 20 } 21 int query(int p, int l, int r, int rt)//這里由于query和update都是對單點操作,所以將兩個函數合并為一個了 22 { 23 if (l == r){ 24 MAX[rt] -= p; 25 return l; 26 } 27 int m = (l + r) >> 1; 28 int ret = (MAX[rt<<1] >= p ? query(p, lson) : query(p, rson));//這里判斷左子節點是否還有相應的空間,若沒有則遞歸右子節點。 29 pushup(rt); 30 return ret; 31 } 32 int main() 33 { 34 while (~scanf("%d%d%d", &h, &w, &n)){ 35 if (h > n) h = n;//通知小于h時可以直接縮小h的范圍 36 build(1, h, 1); 37 while(n--){ 38 int p; 39 scanf("%d", &p); 40 if (MAX[1] < p) puts("-1"); 41 else printf("%d\n",query(p, 1, h, 1)); 42 } 43 } 44 return 0; 45 }?
轉載于:https://www.cnblogs.com/-Unc/p/4115969.html
總結
以上是生活随笔為你收集整理的HDU2795 Billboard的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle学习笔记(三)-------
- 下一篇: 自动计算尺寸列表功能案例ios源码