首页 > 代码库 > 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 }
HDU2795 Billboard
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。