摘要: 分析:要遍历所有的区间,肯定是枚举左端点,然后再枚举右端点.关键是怎么高效地求区间&,|,一般而言是用前缀和的,但是&,|不满足区间可减性,所以可以考虑线段树?这道题不带修改操作,用线段树太浪费了,那么可以用ST表来维护. 查询做到O(1)了,但是怎么快速枚举区间呢?枚举左端点和右端点肯定只能选择一 阅读全文
posted @ 2017-11-02 21:57 zbtrs 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 分析:模拟题,关键就是要理解题目意思.m≥3的轮换可以拆成m=2的小轮换,小轮换的话只需要交换一下就可以了. 阅读全文
posted @ 2017-11-02 21:49 zbtrs 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 分析:打个表,会发现a1,a2中较小的一个数会出现很多次,把这些数删掉,就会形成若干个等差数列,每个等差数列中新出现的数的个数是a1a2较大者除以较小者.之后取个余,继续做重复的操作就行了. 阅读全文
posted @ 2017-11-02 20:52 zbtrs 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 分析:比较难想的一道dp题.要想补兵的数量最多,最后每个小兵的血量肯定是呈一个阶梯状的:i,i+1,i+2......i+k.那么记录一下每个血量i离它最近的小兵的血量是多少,记作cur[i].那么把这个小兵砍成i就需要砍cur[i] - i次,显然一轮是不可能有这么多次的,只有前面的血量不去砍,留 阅读全文
posted @ 2017-11-02 14:33 zbtrs 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 分析:因为每一组编号都是连续的嘛,所以能分成一组的尽量分,每次加边后dfs判断一下1和n是否连通.有向图的判连通没有什么很快的方法,特别注意,并查集是错的!这个算法可以得到60分. 事实上每一次都不需要从点1开始dfs,因为之前很多点都遍历到了,再从1开始会重复.如果新加的一条边的起点没有被访问过, 阅读全文
posted @ 2017-11-02 14:14 zbtrs 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 分析:感觉像是贪心,再看数据范围这么大,肯定是贪心没错.但是要怎么贪呢?主要的思想是让每次往上加的数尽量多,肯定要先把0分裂,如果能正好一起跳到最终状态就好.举个例子:5,3,2,1,最大值比次大值大2,所以肯定有一个0先跳两下,另外一个0分裂,等到第一个0跳了两下后再接着跳,这样手推感觉有点复杂, 阅读全文
posted @ 2017-11-02 13:54 zbtrs 阅读(192) 评论(0) 推荐(0) 编辑