- 博客(10)
- 资源 (6)
- 收藏
- 关注
原创 POJ 1823 Hotel(线段树区间更新)
题意: 一个Hotel有N个房间,一开始全部为空。 接下来有M个询问。 输入1,代表房间被占用,然后输入两个数代表房间被占用的房间号和数量。 输入2,代表房间被置空,输入两个数代表房间被清空的房间号和数量。 输入3,输出连续最长没有被占用的房间数量。 思路: 线段树的区间更新,维护的值还是很好想的, 分别是当前 线段的maxl最长连续的左区间,maxr最长
2015-06-17 19:04:54 551
原创 hdu 1566 Color the ball(线段树区间更新)
解析: 题意说的很清楚了,从a更新到b,简单的线段树区间更新问题。 mymy codecode#include <cstdio> #include <cstring> #include <algorithm> #define ls (o<<1) #define rs (o<<1|1) using namespace std; typedef long long ll; const int N =
2015-06-17 15:36:29 637
原创 HDU 5238 Calculator(中国剩余定理+线段树)
题意: 有加,乘,次方3种运算,初始值为x,给定运算式。 现在有2种操作: 第一种:告诉你x的值,求答案模29393。 第二种:更改某个位置的运算。 解析: 线段树维护值域的问题,但是那个操作并不能简单的合并,因为值域还是很大的数组开不下,所以我们得另寻他法。 可以发觉29393并不是质数,29393 = 7×13×17×19。 设: t1=ans%7
2015-06-17 09:19:05 1362
原创 HDU 5039 Hilarity(dfs序+线段树)
题意: 给出一颗树,树的每条边上有权值(0或1)。 有两种操作: 1. 修改某个边的权值,0变为1,1变为0。 2. 查询当前的树有多少个不同的路径,使得路径上的权值异或和为1。 注意:起点和终点不同,算作不同一条路径。 思路: 其实发现这题是路径上的异或,那么就有更简单的做法了,因为不用真的求出所有的路径,确定一个根,那么两个点路径的权值异或和可以用它们到跟的路径的
2015-06-17 09:02:51 729
原创 hdu 5242 Game(dfs+线段树)
题意: 给定一个树形的游戏网络,可以从根节点出发K次,每次沿着一条路径走下去,不能回头,出口在各个叶子节点,在路过一个节点时可以 获得该点的权值,每个点的权值只能被获得一次(获得一次之后该点的权值变为0),问K次怎样走最后可以获得的权值总和最大,求最大值。 解析: 首先预处理出dfs序,然后求出每个dfs序的权值,以及每个节点在这个dfs序中的子树的区间。 然后用线段树维护最大的链上,
2015-06-10 21:39:41 536
原创 hdu 4027 Can you answer these queries?(线段树)
题意: 给定100000个数,两种操作,0 i j表示将i j这段的数字都开根号(向下取整),1 i j表示查询i j之间的所有值的和。(所有的和都不超过64位) 解析: 此题的关键是要理解对任何64位以内的值,开根号最多不会超过7次,所以用线段树做,更新到叶子节点的次数最多7次,所以,每当我们要进行更新操作的时候,我们先判断一下这个区间是否有必要进行更新(若全都是1就没有更新的必要了),判
2015-06-09 09:44:22 540
原创 hdu 5239 Doom(线段树+数论)
题意: 给出n个数和一个初始值为0的答案。每次操作给出一个区间[l,r],把区间所有的数加到答案中,之后把区间的每个数都平方。每次操作都需要输出答案 mod 9223372034707292160(2 ^ 63 - 2 ^ 31) 思路 这题的做法和 hdu 4027 类似 首先,应该想到这个题可以用线段树来维护区间的和,然后对于(2 ^ 63 - 2 ^ 31)这个数,即任意数的平方
2015-06-09 09:35:03 1013
原创 hdu 5249 KPI (动态中位数,两个set)
解析: 题意要求动态的求中位数,参考别人的方法是先开两个优先队列。 以及利用一个队列来模拟管道。 然后左边升序,右边降序,右边个数-左边个数>=1,然后右边询问的时候直接输出右边最小的,然后看看是左边还是右边的,把对应的那边的个数-1,如果发现(右边个数-左边个数>=1)这个条件不满足了,那么就权衡下,两个队列里面的元素处理下(左给右或者右给左),总的时间复杂度与数据无关,是O(n*
2015-06-09 09:09:16 909
原创 HDU 5265 pog loves szh II(二分)
题意: 给出n,p,n个数,从中取两个数 a,b , 求出( a + b )% p 的最大值。 解析: 先把每个数%p , 可以发现两个数加起来,要么 < p,要么 ≥ p,然后小于 2p。 那么对于大于p的,必定是最大那两个数加起来%p,满足贪心的。 小于p的话,就可以直接找,二分可以,因为满足单调性。 AC代码:#include <cstdio> #include <cstr
2015-06-09 08:59:02 672
原创 HDU 5266 pog loves szh III (线段树+LCA)
解析: 先利用RMQ求LCA的方法,求出每个节点的最值,让后利用线段树来维护每个区间上面的LCA就可以了。思路是比较简单的,可是比赛的时候不会LCA,所以没有做出来。 注意: 本题需要使用手动扩栈的方法不然会栈溢出。 AC代码#pragma comment(linker, "/STACK:102400000,102400000") #include <cstdio> #include <cs
2015-06-09 08:53:59 678
java十五数码图形界面程序
2014-12-23
ctags58.zip
2014-09-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人