线段树
文章平均质量分 56
Clove_unique
All that you have lost can be won back bit by bit as long as you wish for it.
展开
-
[BZOJ4336][BJOI2015]骑士的旅行(树链剖分+线段树+multiset+归并)
题目描述传送门题目大意:n个点的一棵树,有m个骑士,每个骑士居住在n个点中的一个,有一个武力值fi,有三种操作: 1 x y 询问居住在树链x-y上前k大的骑士的武力值 2 x y 编号为x的骑士居住地改为y 3 x y 编号为x的骑士武力值改为y题解k比较小 树链剖分,对线段树中的底层节点维护一个multiset,维护所有居住在这个点的骑士的武力值,然后线段树中的每一个点开一个结构体原创 2017-05-06 22:04:36 · 1382 阅读 · 0 评论 -
[BZOJ3218][UOJ#77]A+B Problem(可持久化线段树+最小割)
题目描述传送门题解第一次见数据结构和网络流结合的题目 orz vfk首先这题一眼最小割嘛 s->i,bi;i->t,wi 对每一个点i建立一个虚拟的点i’,i->i’,pi 然后如果li<=a(j)<=ri且1<=j<=i-1,那么连边i’->j 跑最小割就行了 然而这道题边是n2n^2的,这样做不行看到区间考虑用一棵线段树来优化边数 首先假设没有1<=j<=i-1的限制 先将ai,原创 2017-02-10 07:55:25 · 600 阅读 · 0 评论 -
[BZOJ1396]识别子串(后缀自动机+线段树)
题目描述传送门题解这题思路还是比较好想的 建立后缀自动机了之后统计每一个点right集合的大小,若一个点right集合的大小为1,那么以这个点为右端点的合法子串都是只在字符串中出现过一遍的,所谓合法就是长度在这个点的长度区间[Min,Max]里,这个点在原串中的位置也就是step 那么如何求每一个位置的最小值呢? 假设某一个点right集合大小为1,右端点为step,合法的长度区间为[Min,原创 2017-03-29 21:37:09 · 640 阅读 · 0 评论 -
[BZOJ1058][ZJOI2007]报表统计(线段树+splay)
题目描述传送门题解只能往原数列的后面插实际上更方便了,要不然似乎要写两棵splay233 对于MIN_GAP,一棵线段树维护原序列里的每一个位置,实际上后来插一插就变成了一段区间。维护左端点的数字,右端点的数字,这一段区间的最小值。每一次插入只会修改某一个叶子节点的右端点 对于MIN_SORT_GAP,用一棵splay就行了,维护的和线段树相同代码#include<algorithm>#inc原创 2017-03-27 16:32:23 · 586 阅读 · 0 评论 -
[BZOJ4408][Fjoi 2016]神秘数(可持久化线段树)
题目描述传送门题解首先考虑O(mnlogn)O(mnlogn)的做法 将询问的一段区间由小到大排序,假设现在已经用前k个数组合出了[1..x]中的所有整数,那么现在考虑加入第k+1个数 若k<=x+1,那么我们一定可以组合出[1..x+k]的所有整数,不会出现断层 若k>x+1,那么x+1这个整数是无论如何都无法组合的,就可以确定答案了那么如果不排序有没有办法做呢? 同样假设当前已经组合好了原创 2017-03-04 16:39:10 · 1408 阅读 · 0 评论 -
[BZOJ2212][Poi2011]Tree Rotations(线段树合并)
题目描述传送门题解好像很久以前有一个神人写过什么证明说n个logn的链(线段树上)合并起来复杂度是nlogn的? 那么空间复杂度不会超过时间复杂度?总逆序对数=左子树逆序对数+右子树逆序对数+左子树对右子树的影响 分别计算交换之前交换之后的然后再判断换不换 计算某一个子树对另一个子树的影响与这两个子树内部的顺序无关 如何计算一个子树对另一个子树的影响?分别对这两个子树建立权值线段树 将这两原创 2017-01-29 21:53:58 · 1398 阅读 · 1 评论 -
[BZOJ1593][Usaco2008 Feb]Hotel 旅馆(线段树)
题目描述传送门题解十倍经验题= = 线段树的一个结点维护3个值,分别是区间最长,左端点连续最长,右端点连续最长,然后就可以搞了。 update的时候注意分几种情况,还有整个区间都被覆盖的特殊情况。 最后查询开头的时候需要一点小技巧。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;const原创 2016-03-24 23:34:05 · 676 阅读 · 0 评论 -
[BZOJ3211]花神游历各国(线段树)
题目描述传送门题解同上帝造题的七分钟2 区间修改全部下放到叶子节点 对于开方到0或1不用再修改的点打标记代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define LL long long#define N 100原创 2017-01-29 19:36:37 · 817 阅读 · 0 评论 -
[BZOJ1651][Usaco2006 Feb]Stall Reservations 专用牛棚(线段树)
题目描述传送门题解把所有区间覆盖了之后求覆盖的最大值即可 线段树裸题。。。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 1000005int n,m;int maxn[N*4],delta[N*4]原创 2017-01-29 19:09:43 · 822 阅读 · 0 评论 -
[BZOJ1828][Usaco2010 Mar]balloc 农场分配(贪心+线段树)
题目描述传送门题解按照右端点第一关键字(从小到大)左端点第二关键字(从大到小)排序 贪心选即可 如何保证正确性? 其实就是保证选了当前的以后的不会再有更优的方案代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#defi原创 2017-01-29 18:51:37 · 678 阅读 · 0 评论 -
[BZOJ3747][POI2015]Kinoman(线段树)
题目描述传送门题解刚开始想简单了,比较有趣的一道题 首先预处理每一个部电影与其相同的下一部电影的位置 首先将所有的电影的第一个赋成正权,第一个的下一个赋成负权,做一遍前缀和每一个点就表示了[1,i]区间的值 左端点向右移动的时候用线段树动态修改和维护代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdi原创 2017-01-27 17:35:53 · 983 阅读 · 0 评论 -
[BZOJ3123][Sdoi2013]森林(主席树启发式合并)
题目描述传送门题解主席树的启发式合并裸题? 坑点: ①强制在线,但是我刚开始的时候ans里存的并不是答案,而是离散化之后的值,gg。 ②合并的时候lca数组要完全清空。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 1000原创 2016-12-15 16:42:55 · 772 阅读 · 0 评论 -
[BZOJ3932][CQOI2015]任务查询系统(主席树||树状数组套主席树)
题目描述传送门题解主席树的代码还真是短。 思路很好想,对于区间[l,r],只需要在l处+1并在r+1处-1就可以用前缀和来维护了。 那么可以主席树套个树状数组维护前缀和。 不过20s卡时跑过,,,不管怎么说多一个log嘛。。。我们还可以这样考虑,首先把所有的点读进来,然后按照时间排序,建主席树的时候按照时间轴建权值线段树,这样就保证了每次查询的时候当前时间点前的都加了,后的都原创 2017-01-06 09:23:57 · 900 阅读 · 0 评论 -
[BZOJ2333][SCOI2011]棘手的操作(可并堆||线段树+离线)
题目描述传送门题解对没错总会有一道题分到这个编号…233333第一眼想到线段树,处理生成树(重新编号)使在任何时间在同一个连通块里的点都在一个连续的区间,然后搞搞搞就可以了 然而要是换成可并堆的话操作还真是棘手啊…首先我们要维护两种可并堆(一个可并堆和一个splay也可以…),以下简称a堆和b堆 a堆是按照题目中的操作合并的,也就是说有若干个小堆 b堆只有一个堆,维护的是所有a堆的堆顶(最大值原创 2017-01-07 15:18:39 · 956 阅读 · 0 评论 -
[BZOJ4556][Tjoi2016&Heoi2016]字符串(后缀数组+二分+st表+主席树)
题目描述传送门题解思路清晰就很好写… 首先二分答案mid 找到Suffix(c),在height数组中向左向右分别二分最远的lcp为mid的后缀 用st表实现O(1)O(1)查询 然后就判断[l,r]中是否出现了a…b的后缀 用可持久化线段树判断即可常数大,需要卡卡常数 学习了学姐的一个方法就是这种只需要判断有没有数的不用求具体几个的就只要有数了就返回,不做无用功然后说一下如何在heig原创 2017-01-11 14:52:00 · 903 阅读 · 0 评论 -
[BZOJ3064]Tyvj 1518 CPU监控(线段树)
题目描述传送门题解这题真是一道恶心的线段树 需要维护的值有6个:当前最大值,当前的加法标记,当前的覆盖标记;历史最大值,历史最大的加法标记,历史最大的覆盖标记 其实说历史最大的加法和覆盖标记并不是那么准确,更准确地说应该是 现在能用来更新子树的最大值 维护当前的一系列量都比较好写,都是线段树的基本操作 但是维护历史的一系列量更新就比较麻烦了,首先要知道的是维护历史的量一定分别对应大于等于维护原创 2017-03-30 20:59:03 · 1002 阅读 · 0 评论 -
[BZOJ4756][Usaco2017 Jan]Promotion Counting(可持久化线段树)
题目描述传送门题解主席树好久没打也是各种手残啊 这题也是线段树合并的裸题过几天写一发!代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 100005int n,LSH,sz,dfs_clock,a[N],原创 2017-03-30 21:51:27 · 902 阅读 · 0 评论 -
[BZOJ4353]Play with tree(树链剖分+线段树)
题目描述传送门题目大意: 给出一棵包含N个节点的树,设每条边一开始的边权为0,现在有两种操作: 1)给出参数U,V,C,表示把U与V之间的路径上的边权变成C(保证C≥0) 2)给出参数U,V,C,表示把U与V之间的路径上的边权加上max(C,路径上边权最小值的相反数)。 你需要统计出每次一操作过后树中边权为0的边有多少条。题解线段树维护区间最小值,区间最小值的个数,区间中为0的数的个数原创 2017-04-24 07:56:35 · 636 阅读 · 0 评论 -
[BZOJ4551][Tjoi2016&Heoi2016]树(dfs序+线段树)
题目描述传送门题目大意:给定一颗有根树(根为1),有以下两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均无标记,而且对于某个结点,可以打多次标记。)2. 询问操作:询问某个结点最近的一个打了标记的祖先(这个结点本身也算自己的祖先)。题解16省选竟然有无脑题。。 搞出dfs序了之后就是线段树区间修改单点查询最大值问题 学习了一下标记永久化代码#include<a原创 2017-04-23 20:50:51 · 592 阅读 · 0 评论 -
CF#410(Div.2) 解题报告
A题意简述给出一个字符串,问是否能改变且仅改变一个字符,使其变成回文串。数据范围|S|≤15|S|\le 15题解模拟。。 不过有一个需要注意的地方:因为不能不改或者改成一样的字符,所以长度为偶数且本身就是回文串的字符串是不合法的,但是长度为奇数的回文串是可以的,比如aaa改成aba代码#include<algorithm>#include<iostream>#include<cstring>原创 2017-04-23 18:47:28 · 782 阅读 · 0 评论 -
[BZOJ2584][Wc2012]memory(扫描线+splay+线段树)
题目描述传送门题目大意:在二维平面中有n个线段,线段互不相交,每一次一个操作将一个线段向四个方向之一移走(也就是平移到无穷远处),如果移动的过程中被其他线段所阻挡则移动是不合法的。求:最早的一次不合法移动;构造一种合法的移动序列将所有线段移走题解首先考虑第二问,实际上所有的线段都按照任意一个固定的方向移动就是可以直接都移走的,所以我们需要将线段编号。因为线段均不相交,所以对于任意两条线段的所有横坐标原创 2017-04-22 19:05:48 · 1295 阅读 · 0 评论 -
[BZOJ3958][WF2011]Mummy Madness(二分+扫描线+线段树)
题目描述传送门题目大意:一个正方形的网格,你与木乃伊轮流移动(你走出第一步)。轮到你时,你可以移动到相邻的8个格子之一,或者站着不动。轮到木乃伊时,每个木乃伊会移动到其相邻的格子之一,使得他与你的欧几里得距离尽量小(假设你与木乃伊都站在格子的中心位置)。允许多个木乃伊同时占据同一个格子。 在每个单位时间内,你先做出移动,然后木乃伊做出移动。如果你与任何一个木乃伊站在同一位置,你会被抓住。当然,你试原创 2017-04-20 11:27:29 · 907 阅读 · 1 评论 -
[BZOJ4059][Cerc2012]Non-boring sequences(扫描线+线段树||暴力分治)
题目描述传送门题目大意:被称为是不无聊的,仅当它的每个连续子序列存在一个独一无二的数字,即每个子序列里至少存在一个数字只出现一次。给定一个整数序列,请你判断它是不是不无聊的。题解首先一个扫描线(树套树)的做法 对于每一个点i,假设前面和后面和它相同的数字的位置为pre和nxt,那么左端点在[pre+1,i],右端点在[i,nxt-1]中的子区间都是合法的。将[pre+1,i]看成横坐标,[i,nx原创 2017-04-21 11:28:46 · 911 阅读 · 0 评论 -
[BZOJ2161]布娃娃(扫描线+线段树)
题目描述传送门题目大意:第i个布娃娃有一个耐心值P[i]以及一个魅力值C[i],并且还有能够忍受的耐心值的上限R[i]以及下限L[i]。当一个布娃娃j满足L[j] ≤ P[i]并且P[i] ≤ R[j],那么布娃娃j喜欢布娃娃i。求第i个布娃娃想知道喜欢它的布娃娃中,魅力值第i大的布娃娃的魅力值是多少。题解将C离散,然后PLR实际上是一个东西可以看作一维 将区间拆成左端点和右端点,将所有的点排序,原创 2017-04-19 20:14:41 · 1858 阅读 · 2 评论 -
[BZOJ1818][Cqoi2010]内部白点(扫描线+线段树)
题目描述传送门题目大意:无限大正方形网格里有n个黑色的顶点,所有其他顶点都是白色的(网格的顶点即坐标为整数的点,又称整点)。每秒钟,所有内部白点同时变黑,直到不存在内部白点为止。统计最后网格中的黑点个数。 内部白点的定义:一个白色的整点P(x,y)是内部白点当且仅当P在水平线的左边和右边各至少有一个黑点(即存在x1 < x < x2使得(x1,y)和(x2,y)都是黑点),且在竖直线的上边和下边各至原创 2017-04-19 19:11:19 · 933 阅读 · 0 评论 -
[POJ1389]Area of Simple Polygons(扫描线+线段树)
你能用好你所拥有的每一分钟,你就是对自己最好的珍重。原创 2016-08-08 15:51:18 · 633 阅读 · 0 评论 -
[POJ1151]Atlantis(扫描线+线段树)
题目描述传送门题目大意:给出n个矩形求交的面积。题解扫面线的裸题 将纵坐标离散,并且将矩形分解成左右两个边界,按照横坐标排序 线段树的每一个节点[l,r]存储的是dis(l-1~r)这一段离散化之前的距离,维护一个标记表示区间被完全覆盖了几次,每一次修改update就行了 由于扫描线问题的特殊性,不存在在一个大区间里抠去一个小区间的问题,所以这个做法还是非常科学的代码#include<algo原创 2017-04-19 17:10:52 · 823 阅读 · 0 评论 -
[BZOJ1218][HNOI2003]激光炸弹(扫描线+线段树)
题目描述传送门题目大意:二维平面上有n个点每个点有一个权值,问用边长为R的正方形框住一些点获得的最大权值和是多少,正方形边界上的点不算在权值和之内。题解感觉和繁星满窗那道题差不多,将每一个点转化为一个正方形,意义为边长为R的正方形若左上角的点在这个范围内那么它能覆盖到这个点 不过这道题边界上的点都不算在内,所以相当于是要讲转化成的那个正方形缩小一圈,于是忘每两个点之间暴力插入一个点就行了代码#in原创 2017-04-19 15:45:52 · 1203 阅读 · 0 评论 -
[BZOJ3166][Heoi2013]Alo(可持久化线段树+可持久化tire树)
题目描述传送门题解xorxor的操作很容易想到可持久化trie树,但是关键是次大值比较头疼。 可以发现,如果可以维护出来每一个点向前和向后第一个以及第二个比它大的值的位置就可以确定区间了。 实际上,可以用可持久化线段树的思想来搞。将所有的值从大到小排序,然后按照每一个点的位置插入线段树,相当于对于每一个点,比它大的点已经都插入进去了。每一次查询就是从权值大于当前点的线段树里找出当前点前驱的前驱,原创 2016-12-15 16:41:21 · 723 阅读 · 0 评论 -
SDOI2017 Round1 解题报告
Day1A product题意简述定义f(0)=0,f(1)=1,f(n)=f(n−1)+f(n−2)(n≥2)f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n\ge 2) 求∏i=1n∏j=1mf(gcd(i,j))\prod\limits_{i=1}^n\prod\limits_{j=1}^m f(gcd(i,j)) 多组数据,对109+710^9+7取模数据范围对10%原创 2017-04-12 07:43:21 · 1231 阅读 · 0 评论 -
[luogu3373][模板]线段树 2(线段树)
题目描述传送门题解维护一个乘法标记和加法标记 当加法标记遇上乘法标记->直接加 当乘法标记遇上加法标记->将加法标记乘上乘法标记 每一次更新先考虑乘再考虑加代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define原创 2017-03-17 11:18:08 · 643 阅读 · 0 评论 -
[BZOJ1782][Usaco2010 Feb]slowdown 慢慢游(dfs序+线段树)
题目描述传送门题解单点修改+树链查询转化成子树修改+单点查询 写链剖也嗞磁代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 100005int n,dfs_clock;int tot,point[N],原创 2017-04-01 18:48:13 · 748 阅读 · 0 评论 -
[BZOJ3295][Cqoi2011]动态逆序对(树状数组套线段树||cdq分治)
总有一天 能让这欢喜的歌声传到你身边原创 2016-04-28 14:10:29 · 937 阅读 · 0 评论 -
[BZOJ2674]Attack(整体二分+树状数组套线段树)
题目描述传送门 数据有坑: 给出的不一定是左下角和右上角,需要自己判断交换。题解没见过整体二分里面还有个树套树的… 首先把坐标离散 感觉是K大数查询和矩阵乘法两道题的结合版,就是动态求矩阵的k大值 用bit套线段树的原因是没法写二维bit,于是线段树动态开点 把初始的矩阵和SWAP操作都看做修改,QUERY看成查询 二分第k大的数是mid,做权值小于等于mid的修改,查询的时候如果总数原创 2017-01-10 21:57:56 · 1296 阅读 · 0 评论 -
[BZOJ3110][Zjoi2013]K大数查询(主席树套线段树||整体二分 )
仿佛将那些年幼时的记忆全部唤起的声音已经被那温柔的笑脸 拯救过多少次原创 2016-04-28 09:57:18 · 971 阅读 · 0 评论 -
[BZOJ3339]Rmq Problem(离线+线段树)
膝盖还在发抖,如同十二岁时的我 从教室后门偷溜出去 我不在乎被责备两次 等待对我这种人来说是浪费时间原创 2016-04-27 08:18:59 · 1037 阅读 · 0 评论 -
[BZOJ1012][JSOI2008]最大数maxnumber(线段树)
很多事都被慢慢拆下来拼凑在心里然后物是人非。原创 2016-03-22 18:42:20 · 735 阅读 · 0 评论 -
[BZOJ4196][NOI2005]软件包管理器(链剖+dfs序)
寂寞只是一场华丽的虚张声势。原创 2016-03-22 17:23:35 · 650 阅读 · 0 评论 -
[BZOJ1977][BeiJing2010组队]次小生成树 Tree(kruskal+链剖)
水边让我们享受脱离长辈怀抱的远行刺激,山地让我们体验回归祖先居所的悠悠厚味。原创 2016-04-03 19:43:10 · 810 阅读 · 0 评论 -
[BZOJ1067][SCOI2007]降雨量(线段树)
水边让我们感知世界无常,山地让我们领悟天地恒昌。原创 2016-04-03 14:51:44 · 1100 阅读 · 0 评论