算法题解-线段树/树状数组
Jarily
这个作者很懒,什么都没留下…
展开
-
PKU2886(Who Gets the Most Candies?)线段树+反素数
/******************************************* 题目大意: 有n个小孩在玩游戏,每个小孩手上都有一个数字; 第k个小孩先出去,然后给出手上的数值x; 大于0的话就是从他左边开始数的第x个小孩; 否则就是从右边数的第-x个小孩接着出列; 直到所有小孩出列; 第p个出列的小孩,将拿到f(p)个糖果; f(p)表示p的正因子个数; 现在要求得到最多糖果的小孩;原创 2013-03-05 13:31:02 · 1325 阅读 · 0 评论 -
PKU3468(A Simple Problem with Integers)线段树的成段更新
/*********************************************** 题目大意: Q a b :查询区间[a,b]的和; C a b x : 更新区间[a,b],区间所有值加上x; 算法思想: 线段树的成段更新--延迟更新; 在区间查询和更新的时候加入一个延迟节点; 每次要在下次查询或者更新到该区间时; 再把节点的信息传递到左右孩子的结点上; 这样更新大大减少了时原创 2013-03-07 15:25:30 · 1285 阅读 · 0 评论 -
PKU3667(Hotel)线段树
/********************************************** 题目大意: 有一个旅馆,有N个房间排成一排; 现在有两种操作: 第一是有a个顾客要入住连续的a个房间; 要求输出最小的左端点的位置,不能满足就输出0; 第二是将以a开始,长度为b的连续房间清空; 1 a: 询问是不是有连续长度为a的空房间,有的话住进最左边; 2 a b: 将[a,a+b-1]的房间原创 2013-03-07 16:21:04 · 1179 阅读 · 0 评论 -
树状数组算法分析
/************************************************************************************ 树状数组有一维树状数组和二维树状数组; 主要的问题模型为已知数组a[n],下标从1开始,更改a中的元素,要求得新的a数组中i到j区间内的和; 树状数组中S[k]存储的是从k开始向前数k的二进制表示中右边第一个1所代表的数字个元原创 2012-12-29 16:32:11 · 587 阅读 · 0 评论 -
PKU2892(Tunnel Warfare)线段树求最大连续区间
/************************************** 题目大意: 一条直线上的有n个顶点; (1)D x 破坏顶点x; (2)Q x 表示查询以x所在的最长的连续的点的个数,包括顶点x本身; (3)R 修复上一次被破坏的点; 算法思想: 线段树,求最大连续区间,操作类似于pku3667; ls 记录区间左端点开始的最大连续个数, rs 记录区间右端点开始的最大的连续个原创 2013-03-12 17:07:51 · 1657 阅读 · 0 评论 -
HDU2795(Billboard)线段树
/************************************************* 题目大意: 有一块h*w的矩形广告板,要往上面贴广告; 然后给n个1*wi的广告,要求把广告贴上去; 而且要求广告要尽量往上贴并且尽量靠左; 求第n个广告的所在的位置,不能贴则为-1; 算法思想: 利用线段树可以求区间的最大值; 将位置即h用来建树(h<=n,大了没有意义); 树中存储的为该位置原创 2013-03-02 21:24:02 · 4496 阅读 · 0 评论 -
PKU2985(The k-th Largest Group)线段树+并查集
/******************************************** 题目大意: n只猫,m个操作; 0 a b 合并两个猫所在的集合; 1 k 询问在当前的所有的集合中含有的猫的个数第k大的为多大; 算法思想: 合并操作应该用并查集; 查询操作可以用线段树; 开始将所有的数据输入进来,利用并查集计算出所有种集合的大小; 然后根据集合的大小建树查询就可以了; ***原创 2013-03-18 09:27:46 · 1646 阅读 · 0 评论 -
Codeforces46D(Parking Lot)线段树区间查询
/*********************************************** 题目地址: http://codeforces.com/problemset/problem/46/D 题目大意: 有一条长度为L的街道,有N个操作,操作有两种: (1)"1 a",表示有一辆长度为a的车开进来想找停车位; 停车位必须满足与它前面的车距离至少为b,与后面的车距离至少为f; 如果能找到原创 2013-03-10 17:44:56 · 1997 阅读 · 0 评论 -
HDU3397(Sequence operation)线段树的多种操作
/********************************************** 题目大意: 0 a b将区间[a,b]所有数全部变成0 1 a b将区间[a,b]所有数全部变成1 2 a b将区间[a,b]中所有数0 1互换,0变1,1变0 3 a b输出区间[a,b]中1的个数 4 a b输出区间[a,b]中最长连续1的个数 算法分析: 涉及到线段树的多种操作; 0,1两种操作原创 2013-03-13 13:50:10 · 1596 阅读 · 0 评论