上一页 1 2 3 4 5 6 7 8 9 10 ··· 12 下一页
摘要: 题意: 给出了n份海报的贴在board上的起始位置和结束位置 问最后可以看到多少份海报 输入: n表示有n份海报 接下来n行 每行 a b 表示海报占据了a~b的位置..思路: 线段树成段更新 用树的结点value表示控制范围内的海报编号.. 因为不用更新到底+查询到每一个叶子节点..所以提高了查询和更新效率.. 其中因为海报长度给的很大.. 所以可以使用离散化来减少空间的消耗以及查询和更新时的递归次数..Tips: 因为给出的a b 表示的是在a~b内贴了海报.. 所以a b给的是值..但是表示的是一段范围.. 如果用正常的离散化..就可能出现 最底下一层贴了一张海... 阅读全文
posted @ 2012-10-26 07:42 Griselda. 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 题意: 给出一些值 然后给出你一些命令 按照命令输出 命令: C a b c 表示更新a ~ b的值加上 c Q a b 表示查询a~b的和输入: n m 表示有n个数 m 个操作 接下来 m 行为命令行思路: 就是简单的线段树成段更新求和 Tips: ※ 询问的时候要 pushdown ※ 注意范围问题吖~Code: View Code 1 #include <stdio.h> 2 #include <cstring> 3 using namespace std; 4 #define LL long long 5 6 const int MAXN = 100010;. 阅读全文
posted @ 2012-10-17 21:37 Griselda. 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 题意: 一群小孩顺时针坐然后在玩约瑟夫环的游戏.. 从第k个小孩开始..每个被选中的孩子扔出手中的纸牌.. 然后按着纸牌上面的数找下一个被选中的小孩.. 如果牌中的数是正数就顺时针数.. 如果是负数就逆时针数.. 其中第 i 个被选中的小孩会得到f( i )颗糖.. f( i )表示 i 的正因子个数.. 要求是找出得到糖最多的孩子个数.. 输入: n k 表示有n个小孩..从第k个开始 接下来 n 行有n个小孩的名字和他手上的牌的编号..思路: 一开始想的是暴力找出这个小孩.. 但是会很麻烦.. 然后这里就用到了反素数了.. 反素数:<http://ac... 阅读全文
posted @ 2012-10-16 12:48 Griselda. 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 题意: 动态更新一段区间的值.. 最后输出总区间的和..思路: 其实就是线段树的成段更新.. 用到了lazy[] 表示懒惰标志.. 懒惰标记: 就是每次更新不更新到最后..而是更新到包含了区间的最大的节点.. 然后如果下次更新的时候更新到了上次已经更新到的节点.. 那先把上次更新暂停的节点往下更新..直到这次更新的区间最大的节点没有被标记.. 这样就省时间了..Tips: pushdown节点就是用来向下更新的.. 要注意的是modify函数..即每次更新的时候 把根节点标记为要更新的数 x 然后顺便求出最大值sum[rt].. ... 阅读全文
posted @ 2012-10-12 11:21 Griselda. 阅读(1831) 评论(0) 推荐(0) 编辑
摘要: 题意: 给出一些人要求插入队列的位置和他们的身高 输出最后队列的每个人身高输入: 给出n 表示有n个人 给出每个人要插进的队列的位置和该人的身高思路: sum 数组保存该区间的空位 a 数组保存该位置的人的身高 pushup函数用来自下向上更新区间空位 modify函数用来根据sum值找出空位并插入..Tips: 比较的时候..如果比左节点的sum值大就往右子树插位置.. 所以比较函数写的应该是..if(p <= sum[rt<<1]) 往右子树插的时候传入的参数也应该相应减少..即p - sum[rt<<1]Code:View Code 1 //模拟链表 数据量 阅读全文
posted @ 2012-10-11 20:49 Griselda. 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 题意: 一个board的面积是h*w..在上面贴一些announcement.. 给出告示的宽度ww..可知告示的面积为1*ww.. 问告示是否可以贴上去..可以就输出在board的第几行..不可以就输出-1思路: 以min(h, n)为长度建一棵树.. 然后每一个的叶子的长度为w.. 找出所有叶子中最大的那个..把announcement贴上去.. 用ma数组存当前区间最大值..Tips: 查询和更新可以一起写..但是我分开写了.. 然后还有一个要注意的是..树的最大宽度为min(h, n) 比较的时候是和左右节点大小比.. ※ 所以modify的时候判断条件也应该是i... 阅读全文
posted @ 2012-10-11 13:03 Griselda. 阅读(547) 评论(0) 推荐(0) 编辑
摘要: 题意: 给出n个数..问循环排序后的最小逆序数思路: 根据出现次序..用线段树的sum记录某一区间出现次数.. 把出现的数值a[i] 更新到 sum[a[i]].. 根据题意..当每一次更新的之前..都对当前位置到最后位置出现的数进行查询.. 即可得到出现比该值早而又比该值大的数的个数..即满足逆序数对的定义.. 所以求和就可得到逆序数对的值.. 当每一次把队头的值移到队尾.. 逆序数对就减少了当前值(a[i]-1)<逆序数对包含该值的都没有了..>.. 但是还有一些逆序数对增加了..(加入到队尾时可与该数组成逆序数对的..)即n-a[i]对.. 所以每一次循环后存在的逆序数... 阅读全文
posted @ 2012-10-10 22:02 Griselda. 阅读(556) 评论(0) 推荐(0) 编辑
摘要: [1166 敌兵布阵]题意: 给出一些命令..要求可以: 随时增加或减少某个位置上的数 随时查询某段区间上的和.. 输入: 一个T 表示有T组样例 每组样例一个n 表示有n个位置 输入命令: Add a b 表示在 a 位置上增加 b Sub a b 表示在 a 位置上减少 b Query a b 表示求 a 到 b 的和思路: 因为数据量很大..所以无法靠暴力来遍历求和.. 所以用线段树..Tips: 更新的时候注意sum数组开到节点的4倍Code:View Code 1 #include <stdio.h> 2 #include <cstri... 阅读全文
posted @ 2012-10-09 21:12 Griselda. 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 题意: 有一个牧师要给好几对新婚夫妇准备婚礼.. 已知每对新婚夫妇的有空的时间以及婚礼持续时间.. 问是否可以让每对新婚夫妇都得到该牧师的祝福~ 如果可以就输出YES以及可行解 不可以就输出NO输入: 一个n 表示有n对新婚夫妇 接下来n行每行a b c 表示在a~b这段时间有空..以及婚礼会持续 c.. P.S.时间只可以选在a开始或者b结束.. eg:08:00 09:00 30 可以在8:00~8:30举行婚礼或者8:30~9:00举行婚礼思路: 2-sat 以在前一段时间举行婚礼或者后一段时间举行婚礼为2个可选方案 然后每对新婚夫妇婚礼时间冲突了就给和另外一个方案连... 阅读全文
posted @ 2012-10-09 13:40 Griselda. 阅读(521) 评论(0) 推荐(0) 编辑
摘要: 题意: panda和ikki.玩游戏.. 给出m个点对关系..这些点都在圆上.. 给点对连线..如果可以不交叉(可以在圆内或圆外连线)则panda赢..否则ikki.赢 输入: 给出n m 表示有n个点 m个点对 接下来m行 有a b 表示点a 和 点b 之间有一条线思路: 2-sat..用来解决2个集合的冲突问题.. 这道题..冲突在于是在圆内和在圆外.. 把边看成点.. 然后看所有边连起来之后会不会出现冲突..即在圆外的边和在圆内的边同时出现在一个强连通分量里了.. 所以求出强连通分量.. 看交叉的两条边..用tarjan染色.. 如果冲突出现了(在圆... 阅读全文
posted @ 2012-10-05 19:26 Griselda. 阅读(247) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 12 下一页