题目传送:Multiply game
思路:简单线段树,单点更新,区间求积,这是上次选拔赛选的题,一看题就是线段树,不过当时线段树不太熟,没敢敲,现在看来居然如此轻松,不过注意这里有大量输出,用printf,居然在这里TLE了一次。。。
AC代码:
#include
#include
#include
#include
#include
#include
#inc...
分类:
其他好文 时间:
2015-05-14 08:44:50
阅读次数:
135
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3074题目大意:单点更新。维护序列乘法。mod1000000007。解题思路:1000000007*1000000007~10^18>1; build(lson); build(rson); ...
分类:
其他好文 时间:
2015-05-13 19:28:31
阅读次数:
168
题目传送:Minimum Inversion Number
思路:线段树,求最小逆序数,先可以通过n*logn的时间用线段树求出初始的逆序对数,然后递推求出其他的解,递推过程看代码
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#i...
分类:
其他好文 时间:
2015-05-13 14:49:06
阅读次数:
158
Tree[N] = A[N-2^k+1] + … + A[N]
单点更新,区间求值:树状数组代表区间的和。const int MAXN = 100010;
int N,Tree[MAXN];int Lowbit(int i)
{
return i & (-i);
}void Update(int i,int x)
{
while(i <= N)
{
Tree...
分类:
编程语言 时间:
2015-05-05 08:53:55
阅读次数:
163
RMQ with Shifts时间限制:1000ms | 内存限制:65535KB难度:3描述In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query (L,...
分类:
其他好文 时间:
2015-05-03 22:00:04
阅读次数:
104
复习了一下线段树,才发现线段树还是做的太少了,好多都忘了
线段树主要有以下功能:RMQ,区间总和查询,单点更新,区间更新
都忘了区间更新时要延迟更新了,这里一开始WA了。
再说说这题的思路:
把每个点作为矩形的左下角,画出所有矩形,以被矩形覆盖次数最多的区域中的任一点作为矩形的右上角,即为我们要求的矩形。
也就是说,我们要求的是被矩形覆盖次数最多的次数,这样用扫描线就可以解决,但直接扫描...
分类:
其他好文 时间:
2015-05-03 09:23:31
阅读次数:
173
题目链接:NYOJ 116 士兵杀敌(二)
这一个是线段树的入门级水题,本题要求我们给出某个区间的区间和。这个问题和线段树的单点更新还是基本一致的。只要把单点更新中的值覆盖变为值得叠加,这一题便可以轻松解决了。如果不知道线段树的单点更新,请移步:传送门
【代码如下】...
分类:
其他好文 时间:
2015-04-30 09:01:59
阅读次数:
182
题目大意:
现在假设天空是一个二维平面(1000*1000)。坐标从(0,0)点开始。现在给出N条信息。
"B X Y",B为字符,x、y是整数,表示将坐标(x,y)的星星变亮。
"D XY",D为字符,x、y是整数,表示将坐标(x,y)的星星变暗。
"Q X1 X2 Y1 Y2",Q是字符,X1、X2、Y1、Y2是整数,表示问有多少颗星星在X1、X2、
Y1、Y2确定的矩形中。
思路:
建立一个二维的树状数组,单点更新,区间求值。其实和一维的差不多。只不过第i个元素变
为了第x行第y列的元素。更新和求值...
分类:
编程语言 时间:
2015-04-28 18:27:05
阅读次数:
154
题目大意:
N个气球排成一排,从左到右编号为1~N,给N组数据,每次给2两个整数s,e,表示从s到e将
气球涂色。当涂到N次以后已经忘记了第i个气球被涂过几次颜色了。现在来计算出每个气球被
涂了几次颜色,并输出出来。
思路:
典型的更新区间,单点求值问题。直接模拟会超时,考虑用树状数组来做。单点更新中,树状
数组表示区间的和。在区间更新中,树状数组表示单个元素的变化。
这道题中,区间(s,e)加1表示将s到e的气球涂色,先进行操作Update(s,1),表示将s~N个气
球全部涂一次颜色,再进行操作Upd...
分类:
编程语言 时间:
2015-04-27 23:48:19
阅读次数:
185
倒着插,倒着插,这道题是倒着插!想一下如果 Posi 里面有若干个0,那么排在最前面的一定是最后一个0.从后往前看,对于第i个数,就应该插在第Posi + 1个空位上,所以用线段树来维护区间空位的个数。说一下那个坑爹的第56行的判断:if(i > 1) printf(" ");将输出的n个数用空格隔...
分类:
其他好文 时间:
2015-04-26 10:47:07
阅读次数:
140