Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我来造福人类。。首先,一看就知道是线段树的题【看不出来再去修炼=。=】 然后,这题的技巧是开一个储存颜色的变量col(longint类型,32位)来存储一段区间的颜色状态,从尾巴开始数第n位为1就表示有n颜色。比如:(49)10=(110,001)2,从尾巴开始数,第1、5、6位为1,所以表示该区间有第1、5、6种颜色。 接下来,染色过程color就要把区间染成设定的颜色,比如要染颜色6,则要把颜色值设为(100,000)2=(32)10,染颜色10,则要把颜色值设为(1,000,000,000)2=(512)10。颜色叠加用or(|)就好了。 最后是统计过程count,就用相应的颜色一个个判定有无就行了。比如查询(67)10有多少种颜色,则把67化为二进制1000011,然后分别用(1、10、100、…、1000000)2与(67)10做and(&)运算,若结果不为0,则tot++,最后返回tot即可。 【等下贴AC代码,是p的,c的童鞋忍受下吧^v^】 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator