随笔分类 - 线段树&树状数组
摘要:题意 给出n个数,要求支持单点修改和区间逆序对,强制在线。 n,m<=50000 题解 和不带修改差不多,预处理出smaller[i][j]代表前i块小于j的数的数量,但不能用f[i][j]代表第i块到第j块逆序对的数量,这样不好维护。 我们用f[i][j]代表从第i块选出一个元素与从第j块选出一个
阅读全文
摘要:题意 询问区间内逆序对数 强制在线 1<=n<=50000 1<=m<=50000 题解 两个预处理f[i][j]为块i到j的逆序对数,s[i][j]前i块≤j的有多少个边角余料用个树状数组就行了
阅读全文
摘要:题意 第一行为一个正整数n,表示小朋友的数量;第二行包含n个由空格分隔的正整数h1,h2,…,hn,依次表示初始队列中小朋友的身高;第三行为一个正整数m,表示交换操作的次数;以下m行每行包含两个正整数ai和bi,表示交换位置ai与位置bi的小朋友。输出文件共m行,第i行一个正整数表示交换操作i结束后
阅读全文
摘要:题意 给定一棵n个节点的带权树,节点编号为1到n,以root为根,设sum[p]表示以点p为根的这棵子树中所有节点的权值和。计算姬支持下列两种操作: 1 给定两个整数u,v,修改点u的权值为v。 2 给定两个整数l,r,计算sum[l]+sum[l+1]+….+sum[r-1]+sum[r] N<=
阅读全文
摘要:3110: [Zjoi2013]K大数查询 Description 有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。 有N个位置,M个操作。操作有两种
阅读全文
摘要:题意 动态区间第k大 (n<=100000,m<=100000) 题解 整体二分的应用。 与静态相比差别不是很大。(和CDQ还有点像)所以直接上代码。
阅读全文
摘要:题解 又一次做这个题上一次用的是线段树上二分。这次用的是整体二分。结果: (第一个是整体二分) 整体二分就是对于所有查询都二分一个值。然后根据能不能成立把询问修改分成两部分,然后第二部分继承第一部分的信息,然后这两部分继续递归。直到答案的值域为一个数,将这些询问的答案设成这个数就行了。 实现的时候,
阅读全文
摘要:题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。 输入输出格式 输入格式: 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数。以下n行每行包
阅读全文
摘要:题解 三维偏序裸题。。。 一般三维偏序是第一维排序,第二维CDQ分治,第三维树状数组。 模板题还是看代码吧。。。
阅读全文
摘要:1176: [Balkan2007]Mokia Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的
阅读全文
摘要:显然,暴力求解的复杂度是无法承受的。 考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案。观察到,深度其实就是上面有几个已标记了的点(包括自身)。所以,我们不妨把 z 到根的路径上的点全部 +1,对于 l 到 r 之间的点
阅读全文
摘要:1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const long long N=100010; 8 long long cnt,head[N]; 9 long long size[N],fa[N],ff[N][30],son[N],dep[N...
阅读全文
摘要:题意 给棵n个点的树。边有边权然后有三种操作 1、CHANGE i v 将编号为i的边权变为v 2、NEGATE a b 将a到b的所有边权变为相反数。 3、QUERY a b 查询a b路径的最大边权。 (n,q<=10000) 题解 树剖裸题。 边权下放。线段树记录最大值最小值即可。
阅读全文
摘要:题意:给你一个长度为n的序列,有m个操作,写一个程序支持以下两个操作: 1. 修改一个值 2. 给出三个数l,r,k, 询问:如果把区间[l,r]的数从小到大排序,能否形成公差为k的等差数列。 n,m≤300000 0≤k,a[i]≤109 题解 这题坑我很久。 一眼望去这题不可作。(倒是想到维护最
阅读全文
摘要:题目 2行c列个点,开始时互不联通,支持给同一列或着同一行相邻的两个点连边,和询问两个点能否在一个联通块里。 1≤C≤100000 1<=操作数<=100000; 题解 线段树的又一个骚操作。 我们把2*2的4个点看作线段树上的叶子结点。其他节点就是其儿子的合并(叶子结点的父亲表示2*4八个点,然后
阅读全文
摘要:题意 给定一个环,每个节点有一个所属国家,k次事件,每次对[l,r]区间上的每个点点权加上一个值,求每个国家最早多少次操作之后所有点的点权和能达到一个值 题解 一个一个国家算会T。这题要用整体二分。我们二分mid给所有国家判断。把可以满足条件的国家放在左边,把所有不满足的国家放在右边。然后继续递归。
阅读全文
摘要:Description 在一条直线上有 N 个炸弹,每个炸弹的坐标是 Xi,爆炸半径是 Ri,当一个炸弹爆炸时,如果另一个炸弹所在位置 Xj 满足: Xi−Ri≤Xj≤Xi+Ri,那么,该炸弹也会被引爆。 现在,请你帮忙计算一下,先把第 i 个炸弹引爆,将引爆多少个炸弹呢? 在一条直线上有 N 个炸
阅读全文
摘要:题解 (不会矩阵加速的先去学矩阵加速) 反正我想不到线段树维护矩阵。我太菜了。 我们在线段树上维护一个区间的斐波那契的列矩阵的和。 然后询问时提取每个符合题意列矩阵的答案项(不是列矩阵存了两项吗,一个是当前项,一个是用来递推的) 因为矩阵乘有结合律所以区间加这个操作就直接区间乘变换矩阵的x次方就行。
阅读全文
摘要:题解 弱智题,二进制表示位数。合并时用| 就是被1<<x卡了好久。 要写成1ll<<x才行 1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 #include<cstdio> 5 #include<algorithm> 6 us
阅读全文
摘要:题意 给你一个1~n排列,问有没有一个等差数列(长度至少为3) 题解 我居然自己想到了正解。 但我最后写挂了,所以我又看了题解。 我们维护了一个以权值为下标的01序列。 我们扫描整个序列。对于每一个正在扫描的数,我们判断以这个数的权值作为对称点,01序列是否对称。 这个序列用权值树状数组维护就行。
阅读全文

浙公网安备 33010602011771号