线段树
Spy97
这个作者很懒,什么都没留下…
展开
-
Codeforces 1073G Yet Another LCP Problem
题意给出一个字符串,提问两组位置,求两组之间两两的后缀的LCP的和题解LCP要用到rank设两组为 a[ ],b[ ]a[~],b[~ ]a[ ],b[ ]将两组的rank放到一起,排序对每个 b[i]b[i]b[i] 只考虑他前面的 a[j]a[j]a[j](反过来再搞一遍就行)已知 b[i−1]b[i-1]b[i−1] 和它前面的LCP...原创 2019-12-05 18:43:19 · 382 阅读 · 0 评论 -
2019 ICPC 上海网络赛 Lightning Routing I
题目链接题意一颗树,动态修改边权,询问某个点到树上最远点的距离题解最远点一定是树的直径的端点之一所以问题就是动态维护树的直径考虑用线段树维护dfs序上一段区间说代表的树的直径合并时,直径有四种可能,分别枚举用树状数组维护结点到根的距离修改时,在dfs序上用树状数组修改查询距离(u,v)(u,v)(u,v)时,dis(u)+dis(v)−2∗dis(LCA(u,v))dis(u)...原创 2019-10-03 08:03:23 · 259 阅读 · 0 评论 -
2019南昌网络赛 I Yukino With Subinterval 带修主席树
题目链接题意给出一个数列,一种操作是修改某个数,另一种是提问一个位置区间 [l,r][l,r][l,r] 和颜色区间 [x,y][x,y][x,y]问,若把连续相同的数字看做一个的话,在区间 [l,r][l,r][l,r] 中只考虑数字介于 [x,y][x,y][x,y] 的话,有几个题解一段连续相同的数字,将第一个看做本身,其余的看做 0, 问题就成了,在区间 [l,r][l,r][l...原创 2019-11-21 21:03:27 · 127 阅读 · 0 评论 -
2019牛客多校第八场 Explorer
题意一个无向图,每条边有一个区间,数值在此区间内才能通过,为从1到n可行的数值有多少个题解离散化线段树+并查集优化思路清奇每条路有个区间,我们将这个区间插入到线段树中,实际插入的是路径怎么理解呢对于线段树中的某个结点,它所包含的路径都在它表示的区间的范围内进一步说,这么多的路径连成的网络是可以互通的线段树在向下走的过程中,我们便将包含的路径合并当到达叶子结点时,如果1和n还是互...原创 2019-08-11 14:36:42 · 317 阅读 · 2 评论 -
2019杭电多校第三场 HDU 6606
题意一个n个数字的序列,要分给k个人,使每个人和的最大值最小,注意可以舍弃最后的任意多个数字题解二分答案考虑二分最小值为 KKKdp[i]dp[i]dp[i] 表示前 iii 个数最多能分成几段,则dp [i]=max{ dp[j]+1 ∣ sum[i]−sum[j]⩽k}dp \ [ i ]=max \{ \ dp[j]+1 \ ...原创 2019-07-30 19:15:40 · 386 阅读 · 0 评论 -
ZOJ 4100 浙江省第16届大学生程序设计竞赛 A题 Vertices in the Pocket
题意nnn个点,一开始没有边,有两种操作一是连接点(x,y)(x,y)(x,y)二是假如向图中加入kkk条边,问最小、最大的联通块个数分别是多少题解最少联通块个数,就是加入的边都连接两个不同的联通块最多联通块个数,首先要把各个联通块补成完全图,如果还有剩的边,则按照联通块的大小从大到小排序,每次合并最大的两个联通块,直到没有边剩下问题的关键是如何求解最多联通块个数,暴力排序是肯定不...原创 2019-05-01 17:13:26 · 590 阅读 · 0 评论 -
wannafly25 E 01串
题意:给出一个01串,有两种操作,操作一是将某一个位置的数字修改,操作二是询问某一个区间,将这个区间看做1个二进制数,可以随意加减2的幂次,问将这个数变为0的最小操作步数。题解:对于一个区间,用变成0用4种情况从后面进一位,不向前面进位 从后面进一位,向前面进位 不从后面进一位,不向前面进位 不从后面进一位,向前面进位比如,110011情况1:由于从后面进位,...原创 2018-10-24 18:49:58 · 266 阅读 · 0 评论 -
离散化后线段树
正常的线段树是这样的[1,10]->[1,5]+[6,10];我们统计区间和的时候也很方便每个区间的r-l+1就是区间长度现在的问题是如果数据范围太大,维护一段区间的和就不简单了例如以下对应关系1 2 3 4 5 610 20 30 40 50 60当区间[10,20]修改为1,线段树操作时为[1,2]修改为1,当区...原创 2018-09-13 09:37:22 · 823 阅读 · 0 评论 -
2018 HNCPC 湖南省程序设计竞赛 CSU 2167 Grid
题意:初始有n*m的点,矩形排列。有2种操作,第一种是将第i行的所有点联通(a<=i<=b),第二种是将第i列的所有点联通(a<=i<=b)。每次操作后输出有多少个联通块。题解:先说结论,若某次操作后有a行,b列联通,则联通块的个数为n*m-a*(m-1)-b*(n-1)+max(0,(a-1)*b(b-1))。我们要做的就是维护行和列中联通的个数。...原创 2018-09-13 08:55:58 · 946 阅读 · 0 评论 -
2017香港regional Black and White
题意:给一个n*n的矩阵,初始全是白色,进行m次操作,每次操作是让一个子矩阵的颜色翻转,求最后有几个黑色的方格。题解:每行分别处理,将一个子矩阵拆成两条线段,分别是上底和下底,然后按照线段的高度排序。每到一行,将所有高度等于该行的下底的线段加入线段树中,表示对这个线段进行翻转,更新答案,最后将所有高度等于该行的上底的线段加入线段树中,表示对这个线段进行翻转。 代码:...原创 2018-09-03 21:36:38 · 147 阅读 · 0 评论 -
扫描线
一、矩阵面积并 (HDU 1542)#include<bits/stdc++.h>#define N 2010using namespace std;struct seg{ int l,r,h,d; seg(){} seg(int l,int r,int h,int d):l(l),r(r),h(h),d(d){} bool operat...原创 2018-08-09 23:48:24 · 342 阅读 · 0 评论 -
Jamie and Tree codeforces 916E
题目大意:给出一棵树以及每个结点的权值,初始时根为1。有3种操作:一是将根换为x;二是给出两个节点u,v,把包含这两个点的最小子树中每个节点权值加上x;三是查询以u为根的权值和。题解:不考虑换根时,需要的算法是裸的模板线段树+dfs序+LCA,考虑到换根,我们不必真的换,只需要对操作2和3进行分类讨论。对于第一种操作,直接将根换一下即可。对于第二种操作,设t为(u,v)的LCA,分为两大种情况,一...原创 2018-04-06 02:30:54 · 301 阅读 · 3 评论