数据结构 线段树
文章平均质量分 85
Fsss_7
这个作者很懒,什么都没留下…
展开
-
最大连续子序和 (加强版?)
题目描述 Description给你K个序列(编号从0到K-1),并且第i个序列有Ni个元素。然后将会有一个由(0~K-1)组成的字符串S=(s1,s2,...,sn)。如果si=p,那么把第p个序列增加到这个大的序列上。例如:如果你有小的序列:0.{1,2,3}1.{-1,2,0}2.{3,4,5,-6}字符串S="1021",那么这个大的序列原创 2015-02-11 21:38:54 · 515 阅读 · 0 评论 -
bzoj3531: [Sdoi2014]旅行
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3531题意:中文题。分析:如果没有颜色的干扰,那么这题只是一个裸树链剖分,但是有了颜色,而且颜色数还多。我们可以想象一下,我们对于每一种颜色都单独取出它们来,然后将相同的颜色像树链剖分那样建线段树,但是如果我们像普通的那样建显然空间会爆炸,我们可以像主席树一样只建有效节点,这样的话我们最原创 2016-08-12 20:55:34 · 362 阅读 · 0 评论 -
hdu5828Rikka with Sequence
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5828题意:给定n个数,操作A:将l~r这段区间都+x,操作B:将l~r这段区间的数a[i]都变成(int)sqrt(a[i]),操作C:求l~r这段数的和。分析:因为一个数最多5,6次sqrt就能变成1,那么显然多几次sqrt的操作就会使得一些段的数字变成一样的,然后我们再sqrt这些段时就能成段原创 2016-08-11 22:20:13 · 308 阅读 · 0 评论 -
hdu5692Snacks
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5692题意:中文题。分析:我们以0为根建树,那么题目就变成了单点修改,查询在以x为根子树中的到根距离最大的点。我们可以直接用dfs序做,dfs序就是根据dfs的顺序将树上节点出现的先后顺序记录下来形成一个2*n的序列,那么每个节点出现两次,以x为根的子树被包含在x出现的两次的区间中。那么我们只需要在原创 2016-07-20 21:51:13 · 758 阅读 · 0 评论 -
hdu5722Jewelry
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5722题意:给定n个数和x,求有多少个区间满足这个区间中至少有一个数恰好出现次数为x。分析:我们枚举区间的右边界,然后会发现可行位置是若干数的可行域的并,每向右移动一位可能改变一个数的可行域,我们只需要将它的可行域与之前的取并就是了,要求取线段的并和添加删除线段,用线段树处理就行了,想扫描线那样。原创 2016-07-18 18:07:01 · 382 阅读 · 0 评论 -
Codeforces Round #353 (Div. 2)D. Tree Construction
链接:http://codeforces.com/contest/675/problem/D题意:按二叉搜索树的方法插入n个互不相等的数,然后要求输出除根以外n-1个点的父亲的权值。分析:当我们建好整棵树后,我们会知道这棵二叉树的中序遍历就是这些数从小到大排列,那么每个数的父亲就是比它小的中最大的那个数或者比它大的数中最小的。知道了这些之后我们随便用点结构或者stl里面的容器都行啦。我用的原创 2016-05-17 21:24:15 · 396 阅读 · 0 评论 -
hdu4521小明系列问题——小明序列
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4521题意:中文题。分析:最长上升子序列,距离大于d。一点点变动而已,用线段树或树状数组维护一下小当前值a[i]且在i-d-1之前的所有的dp[j]就行了。代码:#include#include#include#include#include#include#include#i原创 2016-05-10 22:24:03 · 569 阅读 · 0 评论 -
Codeforces Beta Round #19D. Points
链接:http://www.codeforces.com/contest/19/problem/D题意:给定n个操作,add x y:在平面坐标系中[x,y]位置插入一个点,remove x y:将平面中[x,y]位置的点删掉,find x y:输出所有[x',y'],x'>x,y'>y中x'最小的那个点,如果有多个点输出y'最小的那个点。分析:我们先离线将所有插入点和询问点都处理出来,将原创 2016-04-27 20:09:39 · 794 阅读 · 0 评论 -
hdu1754I Hate It
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754题意:中文题。分析:线段树练习题。单点更新,区间查询最大值。(那些跑得快的应该是写的zkw线段树吧。)代码:#include#include#include#include#include#include#include#include#include#include原创 2016-04-14 19:31:17 · 377 阅读 · 0 评论 -
hdu1166敌兵布阵
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166题意:中文题。分析:线段树练习题。从今天开始练练线段树的姿势。单点更新,区间查询。代码:#include#include#include#include#include#include#include#include#include#include#include原创 2016-04-14 19:22:35 · 295 阅读 · 0 评论 -
hdu4288Coder
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4288题意:给定n个操作:add x:添加一个元素x进入集合,del x:将集合中的x删除,sum:将集合中所有元素排序,输出i%5==3的a[i]的和,并且题目说明每个add的x都不相同。分析:首先我们将所有操作读入,将所有x离散化一下,这样的话我们就只要每次将元素插入到它对应的位置即可。但是问题原创 2016-04-27 15:50:13 · 408 阅读 · 0 评论 -
poj2886Who Gets the Most Candies?
链接:http://poj.org/problem?id=2886题意:给定n,k,然后给定n个坐成环的人的信息:名字和a[i]。第一次先删掉第k个人,然后从这个被删除的人开始数a[i],继续删下一个人,如果a[i]0向后数。第i个删掉的人有一个值F[i],F[i]为i的约数个数。最后输出F[i]最大的人的名字和F[i]。如果有多个F[i]最大输出i最小的那个。分析:首先我们将题目分解成两原创 2016-04-26 22:20:18 · 301 阅读 · 0 评论 -
poj2828Buy Tickets
链接:http://poj.org/problem?id=2828题意:给定n个人的信息依次插入队列,pos[i]第i个人插入到pos[i]的位置,val[i]为第i个人的价值。输出插入所有人之后的价值序列。分析:因为是像插队一样插入队列中,那么越后面的人优先级越高,那么我们就倒着从最后一个人插入,这样的话我们插入位置后就不需要变动了,每次只要找当前这个人插入的位置为第pos[i]个空位即原创 2016-04-26 20:30:16 · 402 阅读 · 0 评论 -
hdu2795Billboard
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795题意:给定一个高为h宽为w的公告栏,然后给出n张要粘贴的高为1宽为wi的公告。每张公告都会选择能贴的最高行的靠左边贴。能贴输出行不能贴输出-1。分析:因为最多才200000张公告,我们可以以行为基础建线段树,每次找最左边的剩余宽度还大于等于wi的位置。O(nlog(min(h,n)))。代原创 2016-04-26 19:24:32 · 332 阅读 · 0 评论 -
BCBestCoder Round #74
链接:BestCoder Round #74A:给定n,接下来是n-1个整数a[i]。a[i]表示在字符串s中从第i个开始的子串和从第i+1个开始的子串的最长公共前缀为a[i]。求字符串s有多少种情况。分析:首先我们处理无解的情况,显然a[i]+i>n是无解的,并且相邻的a[i]如果非0则必然为a[i]-1==a[i+1]。然后就只要算方案数了。O(n)代码:#include#i原创 2016-03-06 21:17:14 · 298 阅读 · 0 评论 -
bzoj3306: 树
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3306题意:中文题。分析:因为题目要求查询子树中的最小值,很明显想到dfs序。但是还有一个操作:换根。这个问题看上去不好处理,但是其实自己画画图就能很好的将换根之后的情况进行处理了,假设当前询问x根为root,这是我们只要分类讨论:当x==root,return tr[1]。当lca(x原创 2016-04-06 16:50:54 · 506 阅读 · 0 评论 -
codevs1283等差子序列
链接:http://codevs.cn/problem/1283/题意:中文题。分析:题目要求我们找是否存在等差数列,其实我们可以将条件弱化为是否存在长度为3的等差数列,直接暴力找会超时(但是这个OJ上的数据好弱,暴力可过),我们可以将这n个数慢慢加入到一个计数数组中,比如说加入x我们就令f[x]=1,这样的话我们在加入x的时候只要判断1~x-1是否和x+1~n是否对称(以x为中心对称)。原创 2016-03-29 21:18:56 · 589 阅读 · 0 评论 -
hdu5893List wants to travel
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5893题意:给定一棵n个节点的树,有边权。m个操作,操作1:给定a,b,求树上a到b上有多少个数字段(比如11233就是3段);操作2:给定a,b,c,将树上a到b路径上所有的边权全部修改为c。分析:树链剖分,在查询时合并的时候注意一下细节即可。代码:#include#include#i原创 2016-09-23 19:12:03 · 492 阅读 · 0 评论