数据结构
文章平均质量分 74
liverpippta
这个作者很懒,什么都没留下…
展开
-
hdu1541,坑爹的经典树状数组
这道题刚看的是时候认为可能用不了树状数组,后来看到一份梳妆数组资料中发现有这道原题,发现自己是在太弱了。题目中已经为你排号序,你所需要做的是计算每个点之前有几个点的横坐标不小于当前点。树状数组只能计算去区间和,而不能比较大小,肿么办?原来是用到了哈希的思想,。。。。用a[t]表明有多少个星星的x坐标为t。。(程序中可以省略此数组),然后用梳妆数组计算a[1]到a[t]之间的和即可。。。然而,很快把原创 2012-08-02 15:18:59 · 2485 阅读 · 0 评论 -
差值序列计数 HDU 3450
这个差值序列想到不难想,即便是不暴力,线段树也能处理。大概就是排序,离散化,然后维护dp(x),表示以序列中第x小的数为结尾的子序列的个数看似简单的水题,WA了差不多10次,好可怕。。。。之前在ZOJ还做了一道类似的题。。。。弱到爆,主要是有一个地方没有处理好比如这样一组数据2 3 2 2 2如果你线段树更新时,dp(x)=sum(v,w),则这样的数据就会WA但改成d原创 2013-07-18 12:18:52 · 925 阅读 · 0 评论 -
poj3468 线段树成段更新模板
#include #include #include #include #include using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define clear(a) memset(a,0,sizeof(a))const int N=101000;原创 2012-08-21 15:42:01 · 791 阅读 · 1 评论 -
CF 242E(div 2) n课线段树更新
这类题之前做过1道,是东北网络赛的A题,内题当时没做出来,听了学长的思路后,场下才AC的。。而这题是我完全独立完成,很有纪念意义的。。。嘿嘿。。话说此题在CF竟然能暴力过关,真心严重B视。。。。应该把时限设在3S内才行。。。题目是这样说的,做2种操作,一个是计算区间和,还有一个是区间所有数都异或某一个数。普通的成段更新肯定不行,我想到异或是对位计算,那就把1个数转化为二进制后,分位来处理,原创 2012-11-17 21:27:25 · 805 阅读 · 0 评论 -
hdu 1540 区间合并
话说就这样一道很水的区间合并,搞了差不多20次WA。。。昨天搞得相当头疼,今天中午终于搞掂了。。。嘿嘿。。题目是说的比较清楚,实际上就是查询与某村庄连续的村庄有多少,设所有村庄初值为0,若这个村庄被日本鬼子毁掉,则变为1,纪录区间从右到左有多少个0或从左到右有多少个0即可。。pushup函数和更新都比较简单,关键在于查询。。。以查询某区间最右边有连续多少个0为例(右查询),先要查询其右子区间,原创 2012-11-10 14:55:46 · 1112 阅读 · 0 评论 -
hdu 1828 求矩形并的周长
昨天学完了矩形的并求面积,是看看小HH的博客做的。。大概对扫描线有一个初步的了解,今天果断学习求矩形的并的周长,哎,明显费劲很多,但本菜坚决没有看大牛的代码,果断自己独立完成,而且1A。。。。预处理不说了,和求矩形并的面积是一样的,只不过要把左右边也要存储在一个数组中,然后排序离散化。。略。重点说以下线段树部分,先说处理横向线段。对每一条线段做查询和更新操作,查询就是求新线段中未覆盖部分,更新原创 2012-10-31 16:40:03 · 897 阅读 · 0 评论 -
划分树模板
话说本周日就要本人的第一场现场赛了,求RP。。。刚刚把划分树的模板题搞掂了,从了解划分树的原理,到阅读神牛的模板,再到自己写模板,还是不轻松的。。。http://blog.csdn.net/zxy_snow/article/details/6681086这位MM的解释还是灰常清楚地,原理在这我就不多说了,下面帖我的代码,其实大同小异。。#include #include #原创 2012-10-18 20:14:40 · 2572 阅读 · 0 评论 -
hdu 3333 离散化+离线操作
若不是题中的数看错了导致舒数组开小造成的RE,就是1A呀,话说最近总是犯这种错误,难道要换眼镜?一看肯定是线段树,求区间内不同的数的和,由于这些数要不同,可能不是连续的,所以要离线处理。。将访问操作按照末端节点排序。。然后再把A数组离散化即可。#include #include #define ss(a) scanf("%d",&a)#define cl(a) memset原创 2012-10-07 10:41:53 · 1020 阅读 · 0 评论 -
2012杭州网赛-1008
这道题要是用线段树(树状数组)的话,也是可以的,不过就是麻烦些。发现p在不断变化,果断想到离线算法。但是发现还是不会,后来看了解题报告才知道,不仅发现要把query中按照高度排序,而且a也要排序。。。。然后将a数组插到不同的集合中,集合就是题目中的询问,该集合中所有的元素都要#include #include using namespace std;#define clea原创 2012-10-06 16:37:22 · 527 阅读 · 0 评论 -
多校3-1006 线段树+离散化
一看就是个裸线段树,而且每次更新就是区间内所有数+1。这题的难点在于它的范围,n#include using namespace std; #define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define clear(a) memset(a,0,sizeof(a))const int N=100100;int原创 2012-08-24 17:08:12 · 696 阅读 · 0 评论 -
多校10-1002 线段树
这道题没想到用一个小小的剪枝竟然过了,看来数据不是灰常强大。。不过过的还是蛮辛苦的,主要是这道题有0,如果说l=0的话,那好办,把l,r都+1就是了。问题是颜色也可以等于0.而这个问题很容易被人忽视,从而掉进陷阱。果然,我开始就忽视掉了,原因还是经验不足。后来才发现一个问题,就是成段更新的时候,延迟标记初始值等于0,而color可以为0。这无疑就冲突了。因此要把延迟数组初始化为-1,最后终于AC了原创 2012-08-29 16:26:48 · 709 阅读 · 0 评论 -
hdu 4339 线段树+二分
本人此方法很搓。。。大多数人的做法和我不一样,时间比我快一倍。这道题是一个非常好的题,首先是他的数据量非常大,这就提示我们要做一些优化。。而本题又是在字符串的基础上设计算法,字符串有很多细节还是必须要注意的。。题意很简单,这里略掉。拿到两个字符串后,首先是圈定线段树的宽度,即两个字符串长度的最短值,不再范围内的字符不会影响结果。接下来就是如何处理query,把两个字符串相减后发现,所求的即从i后最原创 2012-08-18 16:56:06 · 667 阅读 · 0 评论 -
hdu4027
去年上海赛区网络赛的一道简单题,数据量很大,不过要捉住题目中的重点,就是每次更新是对这个区间的所有的数开平方,从2^64开平方一直开尽(由于是开方取整),所以开6次即可。即使是一个个点更新,复杂度也只不过是O(6N)。用COL[]纪录线段中的数据是不是被开尽,这样就节省了后面的无用功。另外注意的是x,y会颠倒。。因为题目中说的是between x and y显然没有交代大小关系。。附代码:#i原创 2012-08-17 17:03:26 · 2229 阅读 · 0 评论 -
codeforces 266E 多颗线段树维护
http://codeforces.com/contest/266/problem/E 题意明显,略掉。把表达式展开,其中i一项,(1-l)一项,根据二项式定理展开,发现只需要维护a[i]*i^k,0#include #include #include #include #include #include #define N 100004#define cl(原创 2013-08-04 15:52:44 · 1022 阅读 · 0 评论