2012年10月12日

HDU 2795 Billboard

摘要: 题意:有一个h*w的广告牌,在这上要贴一些广告,每个广告的高度为一个单位,宽为WI,这样广告牌就可以分成h个层。逐个给出一些广告所占的宽度问你这个广告可以放在第几层(广告尽量靠上靠又)。题解:线段树。把每一层抽象成一个数,在这些数中找出一个层数最小且大于WI的数,并进行更新(当这一层被一个广告占用一部分时,这个数就减去相应的宽度)。这里还有个问题:h大到10^9,如果按给定的h建树的话肯定会爆内存!这里注意到n<=20,000,最多占用20,000行,所以只要按如下方式处理就可以了。if(h>n)h=n;AC代码:View Code 1 #include<cstdio> 阅读全文

posted @ 2012-10-12 21:57 Acmer_Roney 阅读(136) 评论(0) 推荐(0) 编辑

HDU 1009 Just a Hook

摘要: 题意:给你一列不同材质金属棒(金,银,铜),不同的材质价值不同(金-3,银-2,铜-1),起初金属棒全是铜的。对这些金属棒进行一系列的更换后问你全部的金属棒的总价值。题解:线段树+lazy。第一次我竟然写成了这样的。。。 printf("Case %d: The total value of the hook is %d.\n",++cas,val[1]);显然这是错误的!粗心了啊。。。正确的应是:printf("Case %d: The total value of the hook is %d.\n",++cas,Query(1,n,1,n,1)); 阅读全文

posted @ 2012-10-12 20:06 Acmer_Roney 阅读(162) 评论(0) 推荐(0) 编辑

poj 3468 A Simple Problem with Integers

摘要: 题意:给你一串数字,对这些数字有两种操作: 1.Q a b :问数字串从a到b的和。2.C a b c :对数字串a到b逐个加上c。题解:线段树+lazy。所谓lazy思想我的理解就是对于线段树的更新时仅仅在要更新的区间上标记一下,并不进行实际的更新操作,只有当要询问这一区间的信息时再更新。节省了不必要的更新操作。所以在查询时首先要做的就是查看标记这一段是否需要进行更新操做,然后进行相应的操作。AC代码:View Code 1 #include<cstdio> 2 #include<iostream> 3 #define LL long long 4 using nam 阅读全文

posted @ 2012-10-12 17:10 Acmer_Roney 阅读(155) 评论(0) 推荐(0) 编辑

导航