线段树
wly127
这个作者很懒,什么都没留下…
展开
-
[JLOI2014]松鼠的新家————树链剖分
题解:本题主要考查树链剖分。简要题意:一颗树,有n个房间,并且有n-1根树枝连接。小熊维尼先去a1a_1a1,再去a2a_2a2最后到ana_nan,每走到一个房间,他就可以从房间拿一块糖果吃,最后一个房间不用,求每个房间至少需要放多少个糖果。1.树链剖分:路过的点都加一,可以想到树链剖分,每一次将a[i]a[i]a[i]到a[i+1]a[i+1]a[i+1]的节点加一,在一次修改后,因...原创 2019-11-24 21:24:44 · 132 阅读 · 0 评论 -
[HAOI2015]树上操作————树链剖分
题解:本题主要考察树链剖分简要题意:树上操作:操作 1 :把某个节点xxx的点权增加aaa。操作 2 :把某个节点xxx为根的子树中所有点的点权都增加aaa。操作 3 :询问某个节点xxx1.树链剖分:线段树求区间和与单点修改,区间查询,接下来就是树链剖分的模板代码如下:#include<iostream>#include<algorithm>using ...原创 2019-11-04 20:24:51 · 147 阅读 · 0 评论 -
[ZJOI2008]树的统计————树链剖分
题解:本题主要考查树链剖分。简要题意:对这棵树操作:I. CHANGE u t : 把结点u的权值改为tII. QMAX u v: 询问从点u到点v的路径上的节点的最大权值III. QSUM u v: 询问从点u到点v的路径上的节点的权值和1.树链剖分:比较裸的树链剖分,加上了求链上最大值和单点修改,做这种码量很大的题一定要细心!代码如下:#include<cstdio>...原创 2019-10-20 21:10:11 · 97 阅读 · 0 评论 -
[NOI2015]软件包管理器————树链剖分
题解:本题主要考查树链剖分,写了好久!简要题意:树上两个操作,1:查询从该节点到根有多少个结点权值为0,并且把0−x上的所有节点都赋为1。2:查询该节点为根的子树总权值和,并且更新子树全部置为01.树链剖分:其实本题主要难点是理解题意,怎么把题目的信息转化为上面的题意。就会发现其实是树链剖分的模板改动一点,区间覆盖。这里用了输出的优化,总和就为:ans=abs(操作前的总和-操作后的总和)。...原创 2019-10-11 20:47:41 · 155 阅读 · 0 评论 -
NOIp2013提高组 火柴排队————逆序对+贪心
题解:本题主要考查逆序对,树状数组。简要题意:两列火柴之间的距离为:∑(ai−bi)2\sum(a_i-b_i)^2∑(ai−bi)2,每列火柴中相邻两根火柴的位置都可以交换,请通过交换使两列火柴之间的距离最小,求最少交换次树数。1.贪心:我们要∑(firi−seci)2\sum(fir_i-sec_i)^2∑(firi−seci)2最小,相当于要最小化 (firi−seci)(fir...原创 2019-10-04 11:55:34 · 411 阅读 · 0 评论 -
[POI2015]KIN————线段树+枚举
题解:本题主要考查线段树+枚举简要题意:m部电影,好看值为w[i],n天,每天放f[i]部。观看第l,l+1,…,r天内所有的电影,如果同部电影观看多于一次就无法获得这部电影的好看值,求最大化观看且仅观看过一次的电影好看值总和。1.线段树:求最大子段和,同时看过的我们可以让它为负数,抵消好看值。线段树维护2.枚举:枚举右端点,pre[i] + 1到i段加,重复出现就pre[pre[i]] +...原创 2019-07-28 16:25:22 · 233 阅读 · 0 评论 -
NOIp2017奶酪————并查集
题解:本题主要考查并查集。1.并查集:如果两个洞相交(或相切),就把它们连入一个集合,可以想象一个集合就是一条通道,如果通道存在元素与底部、顶部相连输出Yes代码如下:#include<iostream>#include<cmath>using namespace std;long long fa[1010],x[1010],y[1010],z[1010],a[...原创 2019-07-26 16:16:47 · 371 阅读 · 0 评论 -
[USACO08FEB]酒店Hotel————线段树,01序列
题解:本题主要考查线段树维护01序列的操作简要题意:1——n全为0的序列,有m个操作。1:找到长度为x的连续0,并改为1,输出最左的序号。2:x—x+y-1改为01:线段树:找最长的0序列,又有区间修改,用线段树维护左右最长值,再左右值合并,注意细节!代码如下:#include<iostream>#include<algorithm>using namespac...原创 2019-07-22 17:24:04 · 272 阅读 · 0 评论 -
POJ 2182 Lost Cows————线段树+枚举/线段树二分
题解:本题主要考查线段树+枚举/线段树二分简要题意:给定一个序列每个数的逆序数(第一个逆序数个数默认为零,不给出),求原序列1.线段树+枚举:从后往前遍历序列,每个值表示此牛在剩余的排在第ans+1个,删除此编号,最终得牛在此队列中的编号序列。线段树维护查找代码如下:#include<iostream>using namespace std;struct N{ int ...原创 2019-07-30 21:46:19 · 130 阅读 · 0 评论 -
CF915E Physical Education Lessons————动态开点线段树
题解:本题主要考查动态开点线段树简要题意:给1-n的一段空区间,每次给出询问,z == 1 时将 x - y 区间填充,否则为空,问最后一共有多少空区间。1.动态开点线段树:本题数据规模很多,单纯的线段树会MLE,这就需要动态开点。代码如下:#include<bits/stdc++.h>using namespace std;struct node{ int l,...原创 2019-07-20 16:16:06 · 222 阅读 · 0 评论 -
bzoj4240有趣的家庭菜园————贪心+逆序对+树状数组
题解:本题主要考查贪心+逆序对简要题意:一个序列移成一个前一段单调不降,后一段单调不升的序列最少要交换多少次 。1.贪心:先把序列从大到小排序,最大值放在中间,次高的在左边或右边谁逆序对少就在哪边。2.逆序对:对于一个数列下标1…n,把它进行操作后得到的下标为241…那么交换次数即为这个新数列的逆序对数。3树状数组:求逆序对代码如下:#include<iostream>#...原创 2019-07-14 17:48:32 · 160 阅读 · 0 评论 -
P3353 在你窗外闪耀的星星————树状数组,前缀和
题解:本题主要考查树状数组的区间之和的最大值,用树状数组和前缀和(注意:一个位子可以放多个点)代码如下:#include<iostream>#include<algorithm>#include<cstdio> using namespace std;int n,m,a,b,maxn=-123456;int tree[2342567];int l...原创 2019-05-25 22:07:28 · 359 阅读 · 0 评论 -
P1020 导弹拦截———— 动态规划,树状数组
题解:本题主要考查动态规划,求最长不上升子序列和最长上升子序列。因为数据规模大,就用树状数组来维护。代码如下: #include<iostream>#include<algorithm>#include<cstdio>#include<cstring> using namespace std;int n,m,maxn=-123456;...原创 2019-04-08 11:55:43 · 460 阅读 · 0 评论