Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

我来造福人类。。

Posted by bigTG at 2014-03-14 22:36:28 on Problem 2777
首先,一看就知道是线段树的题【看不出来再去修炼=。=】
然后,这题的技巧是开一个储存颜色的变量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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator