线段树/树状数组
文章平均质量分 65
x_1023
这个作者很懒,什么都没留下…
展开
-
BZOJ 3295 [Cqoi2011]动态逆序对 - 树状数组套主席树/树状数组套treap
首先预处理,对于一个输入的数列求逆序对个数利用树状数组nlogn即可解决。 然后考虑删点的问题。每次删点需要在总ans中删去此节点前比此数大的数的个数和之后此数小的个数。 对于当前的节点,如果需要定点查询一段区间中比一定值c大或小的点的个数,只需要在线段树(或平衡树)上操作即可。而对于这道题,需要讨论每个点,即每个点均需建立一棵线段树。每次查询之后需要在每棵线段树上进行修改操作,单次复杂度lo原创 2017-09-03 20:23:53 · 223 阅读 · 0 评论 -
BZOJ 3585 mex - 莫队+(分块/树状数组+二分/乱搞/主席树)
首先注意到大于n的数可以忽略,因其对答案绝无影响。 自己想出来了两种方法:1.分块大法好 就是把n分块,如果数添加之前不存在则把数填进去,块的计数++,统计时扫一遍块,找到第一个未填满的块,在其中找数 复杂度:O(qn√+qn√)O(q\sqrt{n}+q\sqrt{n}) (其实我也不太会算) 用时:13768ms#include<iostream> #include<cstdlib>原创 2017-09-26 00:06:10 · 289 阅读 · 0 评论 -
BZOJ 3211 花神游历各国 - 线段树
是一道。。。很奇葩的题。 想了二十分钟合并递推lazy标记,结果发现答案这么狗血 大概就是,对于每个数,最多log次就成1(或本身为0),然后再sqrt就没有意义了,对答案没有任何影响,于是记录一下最大值,遇到最大值 #include #include #include #include #include #include using namespace std; const i原创 2017-09-09 20:33:24 · 263 阅读 · 1 评论 -
BZOJ 4636 蒟蒻的数列 - 排序+线段树/set
排序真是门博大精深的学问。。。先说线段树,大概就是按照大小排个序,小的排在前,然后直接覆盖上一层,线段树set之后维护一下就好了。只不过范围太大,得动态开节点。还得注意:线段树动态开节点的pushdown的写法:子树有可能未建立,不能直接传递下标,于是先建树,调用set函数建树+传递下标一回了事。#include<iostream> #include<cstdlib> #include<cstrin原创 2017-09-29 23:48:38 · 364 阅读 · 0 评论 -
BZOJ 1858 [Scoi2010]序列操作 - 线段树
大概考的就是一个tag标记的先后顺序和相互影响的问题这道题涉及到两个tag,一个是set,一个是翻转rev,假设先rev,set后入,set直接覆盖掉rev即可;假设是先set再rev,rev直接修改set标记。 pushdown的顺序: 因为有set函数保证之前的rev已清空,如果有rev标记则一定是后来的rev,所以先进行set,然而这里的set还应该覆盖掉子节点的rev,否则子节点的rev原创 2017-09-22 10:51:16 · 225 阅读 · 0 评论 -
BZOJ 3747 Kinoman看电影 - 线段树
线段树写起来好容易挂,还是太渣了。。。一般像这种统计次数的,只能出现一种,要联想到可以转化为pre数组或者next数组在[l,r]的范围之外的有多少个数。对于这道题还需要加点边界,不然很容易就爆了。。。#include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm>using nam原创 2017-10-03 10:51:03 · 322 阅读 · 0 评论 -
BZOJ 4430 赌骆驼 - [树状数组+玄学思想]/CDQ分治
先说这个玄学的思想取补集,本来数对共有n(n−1)2\frac{n(n-1)}{2}个,只需要去除不满足的对数即可。思考不满足的对数:若不满足,则必有一次比较中两个数在两个排列中出现的顺序是相反的。 在三次两两排列的比较中,一共有两次出现次序相反 例如给出三个排列:{3,1,2},{2,3,1},{3,2,1},数对(1,2)很明显不满足条件,在1,2序列的比较中,出现第一次次序相反,1,3比原创 2017-10-03 12:40:19 · 321 阅读 · 0 评论 -
BZOJ 2789 Letters - 贪心+树状数组
坑首先考虑这样一个结论:对于第二个串的一个字母(这个字母X是第num次出现),要保证交换最小次数,那么第一个串一定是第num个原创 2017-10-12 19:08:05 · 279 阅读 · 0 评论 -
树状数组的玄学功效
坑1.单点修改区间最值详情请见 ->blog.csdn.net/u010598215/article/details/48206959裸题模板:HDU1745#include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm>using namespace std;const int原创 2017-10-23 00:21:20 · 223 阅读 · 0 评论 -
BZOJ 3289 Mato的文件管理 - 一般莫队+树状数组
很好想的一个思路是:一个以排列好的数组,在开头添加一个数,那么需要互换的次数恰等于此数在数列中应有的rank值;而在末尾则是数组长度减去rank值。而一个混乱的序列在上一状态已经使用res的次数排成有序数列,因此每次插入一个值只需要通过rank改变res即可。 rank即为数列中有多少数小于它,这里需要注意有多少数小于它可以利用树状数组。这种计数题利用树状数组的+1,-1表示状态的情况很常见。原创 2017-08-30 22:50:59 · 189 阅读 · 0 评论 -
BZOJ 2434 [Noi2011]阿狸的打字机 - AC自动机+树状数组
这道题要用到fail树,学习到了一点知识。 大概就是在一个字串尾节点上找另一段字串的全部节点指向此节点的fail有多少个。然后常规思路很明显没有办法,于是可以改成一颗fail树,从根节点出发通过fial路径连向每一个结点。查询的是子串,那么势必是长串fail指向子串尾节点,由此尾节点一定是长串中某些结点的fail树上的父亲结点。 一般这种在很短时间内统计个数深度的题目都会考虑到数据结构。联系到原创 2017-08-29 23:26:59 · 239 阅读 · 0 评论 -
POJ 2481 Cows - 树状数组/线段树
Cows DescriptionFarmer John's cows have discovered that the clover growing along the ridge of the hill (which we can think of as a one-dimensional number line) in his field is particularly good.原创 2017-04-10 23:29:02 · 708 阅读 · 0 评论 -
POJ 2352 Stars - 树状数组/线段树
Stars Description Astronomers often examine star maps where stars are represented by points on a plane and each star has Cartesian coordinates. Let the level of a star be an amount of the stars原创 2017-04-10 23:20:47 · 222 阅读 · 0 评论 -
POJ 2155 Matrix - 二维树状数组/线段树
Matrix Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row and j-th column. Initially we have A[i, j] = 0 (1 We can原创 2017-04-09 16:39:09 · 215 阅读 · 0 评论 -
POJ 1195 Mobile phones - 二维树状数组/线段树
Mobile phones Description Suppose that the fourth generation mobile phone base stations in the Tampere area operate as follows. The area is divided into squares. The squares form an S * S matrix原创 2017-04-09 16:34:09 · 226 阅读 · 0 评论 -
BZOJ 1176 Mokia - CDQ分治+树状数组
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MB Submit: 2389 Solved: 1072 [Submit][Status][Discuss] Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M Input原创 2017-06-15 22:35:13 · 252 阅读 · 0 评论 -
BZOJ 2120 数颜色 - 带修莫队/树状数组套主席树+平衡树
大概是一道带修莫队的裸题,然而还是WA了无数次,真是太弱了...... 千万要记得带修的话前驱和后驱都要记录 都要记录! 要记录! 记录! 录! ! #include #include #include #include #include #include using namespace std; const int maxn=10005; const int max原创 2017-08-31 20:42:28 · 561 阅读 · 0 评论 -
BZOJ 3730 震波 - 点分树+线段树+容斥
题意:在一棵只有点权的树上在线求据一个点x距离为k的点权和 一言不合又是200+,而且还卡常~~~卡常~~~,幸好机智地加了读入输出优化险险地卡了过去 /笑 每个节点建立两个线段树,以到点的距离为下标,记录权值和。第一棵记录其作为点分数父节点遍历其统治的子树的以距离为下标的点权和。由于点分树树高仅logn,暴力翻树高,在其经过的点分树祖先节点上查询距离为的k-now的点权和(now即为原创 2017-08-15 20:42:03 · 330 阅读 · 0 评论 -
BZOJ 3626 [LNOI2014]LCA - 树链剖分+线段树结构+玄学离散
考察内容:树链剖分+线段树 题意:给定一棵树,对于每一个l,r,z,求Σ(l 规模:n,q 分析: 1.首先考虑到倍增lca,很明显时间复杂度不允许其次考虑离线Tarjan,时间复杂度可以满足,然而会MLE 2.看到所求的值存在巨大的重复之处,考虑到莫队算法,然而不会,根号复杂度不允许,所以进行玄学离散,利用一棵查询树进行查询 3.方法只剩下了lct O(nlogn原创 2017-08-14 00:28:29 · 245 阅读 · 1 评论 -
BZOJ 3155 [Hnoi2013]数列 - 树状数组/线段树区间加
如果用线段树的话,做法很好想。 以i为下标记录SiS_i,那么aia_i被SiS_i到SnS_n所含,每次修改则将SiS_i到SnS_n的每一个S减去修改的差值即可。时间:624 ms#include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm>using namespace s原创 2017-10-15 14:56:17 · 178 阅读 · 0 评论