- 博客(47)
- 收藏
- 关注
转载 HDU-2222 Keywords Search AC自动机模板
题意给n个模式串,一个文本串,问文本串中出现了多少个模式串。分析AC自动机模板Code#include<bits/stdc++.h>#define fi first#define se second#define pb push_back#define lson l,mid,p<<1#define rson mid+1,r,p<<1...
2019-09-25 15:28:00 131
转载 2019ICPC上海网络赛 A Lightning Routing I 点分树(动态点分治)+线段树
题意给一颗带边权的树,有两种操作\(C~e_i~w_i\),将第\(e_i\)条边的边权改为\(w_i\)。\(Q~v_i\),询问距\(v_i\)点最远的点的距离。分析官方题解做法:动态维护直径,然后再支持询问两个点的距离,后者可以 dfs 序 + lca + 树状数组。动态维护直径可以用点分治(点分树),具体做法是,考虑过分治中心的最长路径,我们只需要查询分别以分治中心...
2019-09-25 13:20:00 191
转载 洛谷P2634 [国家集训队]聪聪可可 点分治模板
题意在一棵树上任意选两个点,求它们距离模3为0的概率。分析树分治模板Code#include<bits/stdc++.h>#define fi first#define se second#define pb push_back#define lson l,mid,p<<1#define rson mid+1,r,p<<1|1#d...
2019-09-19 13:03:00 124
转载 codeforces1209E2 状压dp,枚举子集
题意给一个n行m列的矩阵,每一列可以循环移位,问经过任意次移位后每一行的最大值总和最大为多少。分析每一行的最大值之和最大,可以理解为每一行任意选择一个数使它们的和最大。设\(dp[i][S]\)为前i列,已经确定值的行集合为S时,和的最大值。答案为\(dp[m][(1<<n)-1]\),设\(f[i][S]\)为第i列循环位移任意次后选择元素所在行构成的集合为S的最...
2019-09-18 13:27:00 162
转载 2019icpc沈阳网络赛 D Fish eating fruit 树形dp
题意分别算一个树中所有简单路径长度模3为0,1,2的距离和乘2。分析记录两个数组,\(dp[i][k]\)为距i模3为k的子节点到i的距离和\(f[i][k]\)为距i模3为k的子节点的个数\(ans[k]\)为所有简单路径长度模3为k的距离和\(v\)是\(u\)的儿子,\(c\)是u到v的边长度,\(0<i,j<3,k=(j-c\%3+3)\%3\)\(...
2019-09-14 19:35:00 120
转载 POJ - 3376 Finding Palindromes manacher+字典树
题意给n个字符串,两两拼接,问拼接后的\(n\times n\)个字符串中有多少个回文串。分析将所有正串插入字典树中,马拉车跑出所有串哪些前缀和后缀为回文串,记录位置,用反串去字典树中查询,两字符串拼成回文串有三种情况:未匹配完,反串后缀是回文串。匹配结束,正串后缀是回文串。匹配结束,正串等于反串。字典树中维护当前位置有多少正串和当前位置有多少后缀为回文串的正串。...
2019-09-12 14:34:00 135
转载 HFUUOJ1024 动态开点线段树+标记永久化
题意分析动态加点线段树,标记永久化好写常数小Code#include<bits/stdc++.h>#define fi first#define se second#define lson l,mid,p<<1#define rson mid+1,r,p<<1|1#define pb push_back#define ll lon...
2019-09-12 00:59:00 208
转载 HDU 3374 exkmp+字符串最大最小表示法
题意找到一个字符串中最先出现的最小(大)表示位置,和最小(大)表示串出现次数分析用最小(大)表示法求出最先出现的最小(大)表示位置,然后将串长扩两倍用exkmp找出现次数。Code#include<bits/stdc++.h>#define fi first#define se second#define lson l,mid,p<<1#defi...
2019-09-10 00:17:00 112
转载 模板 BSGS
EXBSGS用于求解形如\(a^x≡b~(mod~p)\)的方程ll exbsgs(ll a, ll b, ll p){ if (b == 1LL) return 0; ll t, d = 1, k = 0; while ((t = gcd(a, p)) != 1) { if (b % t) return -1; ++...
2019-09-09 23:06:00 65
转载 补题目录
HDU6562 线段树,区间在a[i]前后加一个数字 Code转载于:https://www.cnblogs.com/xyq0220/p/11494896.html
2019-09-09 23:04:00 63
转载 “美登杯”上海市高校大学生程序设计邀请赛 (华东理工大学) E 小花梨的数组 线段树...
题意分析预处理出每个数的最小素因子,首先可以知道\(minprime(x*minprime(x))=minprime(x)\),我们用线段树维护区间最大值\(mx[p]\),注意这里的最大值并不是实际的最大值,同时维护区间\(a[i]\)乘\(minprime(a[i])\)的次数的最小值\(mnt[p]\)对于操作1,直接区间更新\(mnt[p]\)加1。对于操作2,有两种...
2019-09-05 15:02:00 100
转载 洛谷P3193 GT考试 kmp+矩阵优化dp
题意求\(N\)位数字序列(可以有前导0)中不出现某\(M\)位子串的个数,模\(K\)。\(N<=10^9,M<=20,K<=1000\)分析设\(dp[i][j]\)表示匹配串下标\(i\)匹配到模式串下标\(j\)时,满足要求的方案数;枚举匹配串的下一位是0~9中哪个数,若原先匹配串最远能匹配到模式串的下标为\(k\),加入这个数后最远能匹配到模式串的...
2019-09-03 21:34:00 120
转载 HFUUOJ1023 闷声发大财 概率dp
题意xyq有\(n\)个骰子,第\(i\)个骰子有\(a_i\)面,每次xyq都会把\(n\)个骰子搞一遍,其中的最小值作为结果,问最终结果的期望\(\mod (10^9+7 )\)。分析lfx聚聚出的神仙题,瞎写了个\(dp\)解法设\(dp[i][j]\)为前\(i\)个骰子的点数最小值为\(j\)的概率,有两种情况\(dp[i][j]+=(\sum_{k=j+1}^{4...
2019-09-03 20:46:00 154
转载 洛谷p2375 kmp
题意给你一个字符串,让你求一个\(num\)数组,\(num[i]\)为长度为\(i\)的前缀的公共前后缀长度不超过\(\lfloor \frac{i}{2}\rfloor\)的个数,例如"\(aaaaa\)",\(num[1]=0,num[2]=num[3]=1,num[4]=num[5]=2.\)分析设数组\(dp[i]\)为长度为\(i\)的前缀的所有公共前后缀个数,则\(...
2019-09-03 14:40:00 102
转载 2019icpc南京网络赛 A 主席树
题意给一个\(n\times n\)的螺旋矩阵,给出其中的\(m\)个点的值分别为各个点上数字的数位之和,给出\(q\)个询问,每次询问从\((x1,y1)\)到\((x2,y2)\)的子矩阵的和。分析用官方题解的方法\(O(1)\)推出点\((x,y)\)上的值,将这\(m\)个点按\(x\)排序后依次按\(y\)建主席树,查询时找到对应的\(x1\)和\(x2\)的历史版本,查...
2019-09-01 22:30:00 99
转载 2019icpc南京网络赛 F 主席树
题意给一个\(n\)的全排列数组\(a\),求一个递推数组每一项的值:\(ans[i]=ans[j]+1\),\(j\)为\(a[pos[i]-k]到a[pos[i]+k],(pos[i]为i在数组a中的下标)\)中小于\(i\)的最大的值。分析这题set的做法更优秀,但是想练习一下在主席树上二分。按权值建主席树,对每个\(i\)去查询\(a[pos[i]-k]到a[pos[i]...
2019-09-01 22:15:00 189
转载 2019牛客暑期多校训练营(第三场)F 单调队列
题意给一个\(n\times n\)的矩阵,找一个最大的子矩阵使其中最大值与最小值的差小于等于\(m\)。分析枚举子矩阵的上下边界,同时记录每一列的最大值和最小值。然后枚举右边界,同时用两个单调队列分别维护最大值和最小值,考虑当右边界往右移动时,可行的最远的左边界一定是单调不减的,当枚举到第\(i\)列时且当前左边界为\(dl\)时,两个单调队列维护的分别是区间\([dl,i]\...
2019-08-22 16:25:00 83
转载 2019牛客暑期多校训练营(第一场)I dp+线段树
题意给出n个点,每个点有a,b两个属性,让你从左下角到右上角划一条线,线的左边每个点的贡献是\(a_i\),线的右边每个点的贡献是\(b_i\),使得两部分的总和最大。分析找一条折线将点分割开,使总和最大。把y离散化,然后点按x排序,设\(dp[i]\)为经过第\(i\)个点(该点当作B集合中的点)的折线的权值,之前的点中在这个点上面的点dp值要加上\(b[i]\),之前的点中...
2019-08-20 22:09:00 90
转载 2019牛客暑期多校训练营(第一场)H 线性基+计算贡献
题意给n个整数,求满足子集异或和为0的子集大小之和。分析将问题转化为求每个元素的贡献次数之和。先对n个数求线性基,设线性基大小为r,即插入线性基的数字个数为r,可以分别计算线性基内数的贡献和线性基外的数的贡献线性基外:共n-r个数,枚举每个数x,它可以和将线性基外剩余的n-r-1个数同时存在一个集合内,显然共有\(2^{n-r-1}\)个集合,所以x的贡献为\(2^{n-r-...
2019-08-16 22:21:00 84
转载 2019牛客暑期多校训练营(第二场)E 线段树维护dp转移矩阵
题意给一个\(n\times m\)的01矩阵,1代表有墙,否则没有,每一步可以从\(b[i][j]\)走到\(b[i+1][j]\),\(b[i][j-1]\),\(b[i][j+1]\),有两种询问:\(q=1\),将\(b[x][y]\)的状态反转\(q=2\),计算从\(b[1][x]\)走到\(b[n][y]\)的方案数分析先不考虑状态反转的情况,设\(dp[i]...
2019-08-16 18:22:00 84
转载 2019牛客暑期多校训练营(第二场)D bitset
题意给一个n个结点的带点权的图,找到第k小的团的权值分析用bitset表示团的状态,一个结点必须和团里的每个结点都连边才能加进去,所以可以直接用\(\&\)运算来判断一个结点是否能加进去后还形成团,用优先队列来维护前k小的团的权值。Code#include<bits/stdc++.h>#define fi first#define se second#...
2019-08-13 16:09:00 53
转载 2019牛客暑期多校训练营(第二场)J
题意给一个长度为1e9的只包含1和-1的数列,1的个数不超过1e7,计算有多少对\((l,r)\)满足\(\sum_{i=l}^r a[i]>0\)分析dp求出每段连续的1最右端为右端点的最大子段和和最左端为左端点的最大子段和,可以得出这段1往左或右最远能扩到哪里,将相接的连续1段合并,合并后的每段区间和差值不会超过1e7,每段分别用桶来计数,细节很多要仔细想想..Code...
2019-08-11 21:57:00 107
转载 2019牛客暑期多校训练营(第二场)A 数学
题意eddy走一个长度为\(n\)的环,每次能往前或往后走一步,问走到\(m\)点恰好走完所有点至少一次的概率,前\(i\)个询问的答案要乘起来分析\(n=1,m=0\),答案为\(1\)\(n>1,m=0\),答案为\(0\)\(n>1,m \ne 0\),答案为\(1/(n-1)\)Code#include<bits/stdc++.h>#d...
2019-08-11 21:30:00 58
转载 2019牛客暑期多校训练营(第八场)A 单调栈
题意给一个\(n*m\)的01矩阵,找有多少个全1子矩阵不被其他全1子矩阵包括。分析用单调栈找到的全1子矩阵是不能向上扩展和向右扩展的,只需判断该子矩阵能否向左和向下扩展,若四个方向都不能扩展,则该矩阵合法。是否能向左扩展可用预处理出的左边一列的高度是否大于等于该子矩阵的高度判断,是否能向下扩展可用前缀和判断下面一段是否全1。Code#include<bits/stdc+...
2019-08-11 20:13:00 65
转载 2019 ACM-ICPC 西安全国邀请赛 E-Tree 树链剖分+线段树
题意给一颗带点权的树,三种操作\(1~s~t\) 修改从1到s的路径上的所有点,\(a[i]=a[i]|t\)\(2~s~t\) 修改从1到s的路径上的所有点,\(a[i]=a[i]\&t\)\(3~s~t\) 询问将1到s的路径上的所有点作为石头堆,再加上一个个数为\(t\)的石头堆,进行一次尼姆博弈,先手胜利输出YES,否则输出NO分析尼姆博弈先手必胜条件为所...
2019-05-29 20:26:00 149
转载 BZOJ 3531 [Sdoi2014]旅行 树链剖分+动态开点线段树
题意S国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行。旅行时他们总会走最短路,并且为了避免麻烦,只在信仰和他们相同的城市留宿。当然旅程的终点也是信仰与他相同的城市。S国政府为每个城市标定了不同的旅...
2019-05-23 22:32:00 111
转载 BZOJ 1984 月下“毛景树” 树链剖分+线段树
题意bzoj好像把这题删了,在洛谷里找的毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园。 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校园里。爬啊爬~爬啊爬毛毛虫爬到了一颗小小的“毛景树”下面,发现树上长着他最爱吃的毛毛果~ “毛景树”上有N个节点和N-1条树枝,但节点上是没有毛毛果的,毛毛果都是长在树枝上的。但是这棵“毛景树”有着神奇的魔力,他能改变树枝上...
2019-05-23 20:23:00 82
转载 BZOJ 2243 [SDOI2011]染色 树链剖分+线段树
题意给定一棵有n个节点的无根树和m个操作,操作有2类:1、将节点a到节点b路径上所有点都染成颜色c;2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“1”。请你写一个程序依次完成这m个操作。分析用线段树维护下区间左右端点的颜色,区间不同颜色段的个数,区间合并时接口的颜色相同要减一,树剖一下,跑一遍...
2019-05-23 16:40:00 118
转载 2019南昌网络赛 J Distance on the tree 主席树+lca
题意给一颗树,每条边有边权,每次询问\(u\)到\(v\)的路径中有多少边的边权小于等于\(k\)分析在树的每个点上建\(1\)到\(i\)的权值线段树,查询的时候同时跑\(u,v,lca(u,v)\)三个版本的线段树,查询\(1\)到\(k\)的树上差分和\(val[u]+val[v]-2*val[lca]\)Code#include<bits/stdc+...
2019-05-23 14:04:00 83
转载 BZOJ 4034 [HAOI2015]树上操作 线段树+树剖或dfs
题意直接照搬原题面有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。分析先树剖一下,按重新编号的点建线段树操作1:直接单点修改操作2:一个子树里的点的编号是连在一起...
2019-05-23 13:46:00 95
转载 Codeforces 1054D Changing Array 贪心+异或和
题意给一个长度为\(n\)的位数为\(k\)的整数数列\(a\),一次操作可将任意\(a_i\)取反,问经过任意次操作后最多有多少个区间异或和不为\(0\)分析求出前缀异或和,区间异或和为\(0\)的区间数转化为求有多少对前缀异或和相等,然后用总区间数减一下,对一个\(a_i\)取反等同于对这个位置的前缀异或和取反,所以每个位置的前缀异或和有两种,贪心取当前值出现次数最小的一...
2019-05-17 17:22:00 133
转载 Codeforces 1167 F Scalar Queries 计算贡献+树状数组
题意给一个数列\(a\),定义\(f(l,r)\)为\(b_1, b_2, \dots, b_{r - l + 1}\),\(b_i = a_{l - 1 + i}\),将\(b\)排序,\(f(l,r)\)=\(\sum\limits_{i = 1}^{r - l + 1}{b_i \cdot i}\)计算\(\left(\sum\limits_{1 \le l \le r \le...
2019-05-16 15:47:00 118
转载 Codeforces 1167 E Range Deleting 双指针+思维
题意给一个数列\(a\),定义\(f(l,r)\)为删除\(a\)中所有满足\(l<=a_i<=r\)的数后的数列,问有多少对\((l,r)\),使\(f(l,r)\)是一个非递减的数列分析若\(f(l,r)\)合法,则\(f(l,r+1),f(l,r+2),\dots,f(l,x)\)也都是合法的把每个数在\(a\)中第一次出现的位置\(S\)和...
2019-05-16 15:24:00 118
转载 Comet OJ - Contest #3 D 可爱的菜菜子 线段树+线性基
题意给你一个长度为 \(n\) 的整数序列 \(a_1, a_2, \ldots, a_n\),你需要实现以下两种操作,每个操作都可以用四个整数 \(opt\ l\ r\ v\) 来表示:\(opt=1\) 时,代表把一个区间 \([l, r]\) 内的所有数都 \(xor\) 上 \(v\)。\(opt=2\) 时, 查询一个区间 \([l, r]\) 内选任意个数(包括 \(...
2019-05-15 21:02:00 124
转载 BZOJ 2651 城市改建 树形DP+模拟?
题意给一颗树,删除一条边再加一条边,使它仍为一颗树且任意两点间的距离的最大值最小。题目数据范围描述有问题,n为1或重建不能使任意两点距离最大值变小,可以输出任意答案。分析删除一条边后会使它变成两颗树,两棵树的直径的中点相连一定是使距离最小的红色的边为删除重建的边在树上dp维护每个子树的最大直径\(h[x]\),和去除这个子树后的树的最大直径\(t[x]\),u为x的父亲,删...
2019-05-15 13:44:00 115
转载 codeforces 914 D 线段树+数学
题意给出一个长度为\(n\)的数列\(a\),两种询问,第一种给出三个数\(l,r,x\),区间\([l,r]\)的\(gcd\)值是否和\(x\)相似,若最多改变区间\([l,r]\)中的一个数使区间\([l,r]\)的\(gcd\)值等于\(x\),则相似,第二种给出两个数\(i,y\),将\(a[i]\)变为\(y\)。分析建一个线段树维护区间\(gcd\),这个线段树非常好...
2019-04-24 20:07:00 67
转载 Codeforces 914 C 数位DP+暴力打表+思维
题意给出一个二进制数\(n\),每次操作可以将一个整数\(x\)简化为\(x\)的二进制表示中\(1\)的个数,如果一个数简化为\(1\)所需的最小次数为\(k\),将这个数叫做特殊的数,问从\(1\)到\(n\)一共有多少个特殊的数,答案对\(1e9+7\)取模。分析\(n\)最大为\(2^{1000}\),二进制表示中最多有\(1000\)个\(1\),所以\(n\)以内的数...
2019-04-24 19:31:00 131
转载 HDU 6191 2017ACM/ICPC广西邀请赛 J Query on A Tree 可持久化01字典树+dfs序
题意给一颗\(n\)个节点的带点权的树,以\(1\)为根节点,\(q\)次询问,每次询问给出2个数\(u\),\(x\),求\(u\)的子树中的点上的值与\(x\)异或的值最大为多少分析先dfs一遍,得到dfs序,就可以将这个问题转化为求区间\([l,r]\)中的值与\(x\)异或值最大的经典问题,就按dfs序建可持久化01字典树,查询的时候查区间\([in[u],out[u]]...
2019-04-23 22:27:00 100
转载 51nod 1295 XOR key 可持久化01字典树
题意给出一个长度为\(n\)的正整数数组\(a\),再给出\(q\)个询问,每次询问给出3个数,\(L,R,X(L<=R)\).求\(a[L]\)至\(a[R]\)这\(R-L+1\)个数中,与\(x\)进行异或运算(Xor),得到的最大值为多少。分析前置知识:通过01字典树可以贪心的得到一个数与若干个数中进行异或运算的最大值。在这里每次询问我们要得到\(a[L]\)至\...
2019-04-23 20:57:00 119
转载 Codeforces 1155 D Beautiful Array DP,最大子段和
题意给出一个长度为\(n\)的数列和数字\(x\),经过最多一次操作将数列的一个子段的每个元素变为\(a[i]*x\),使该数列的最大子段和最大分析将这个数列分为3段考虑,第一段和第三段是未修改的,第二段是修改的子段设\(dp[i][j]\)为第\(i\)个数字为第\(j+1\)段的最大子段和三种转移方程第一段:\(dp[i][0]=max(a[i],dp[i-1][0]+...
2019-04-23 17:01:00 91
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人