3003 这个题是这样的,对序列差分后,每个取反操作就是给两个端点的值取反,然后背包之后再状压就好了
4128 这题棒棒的QAQBSGS 23333
4176 这个杜教筛呃呃呃大爷链接
3028 我要去学学生成函数大爷链接
4025 我真TM是智商爆降了,这个东西明显的按时间分治一下就好了,管他什么lct
3498 一位大爷:“将所有点分成两类:度数 < sqrt(m)的和度数 > sqrt(m)的.先求包含第一类点的三元环个数.由于边很少,所以枚举2条边即可.由于一个点的度不超过sqrt(m),所以一条边最多被枚到(sqrt(m))次,最多枚M条边,所以这个操作时O(msqrt(m))的.再求不包含第一类点的三元环个数.由于每条边贡献2个度,所以二类点的数量是O(sqrt(m))级的.直接枚举三个点,复杂度O((sqrt(m))^3)=O(msqrt(m))所以算法总的复杂度是O(m*sqrt(m))的.”
5043 先发个神犇友链当时只知道暴力,f[i][j]表示第i位剩余j最小的k但是这样j为2^60太大无法忍受,所以可以倒着按位做表示这一位剩余j,一定满足j<=n,这样复杂度降为60n,好棒棒呦
4241 一样看以为莫队结果被怼啦大爷链接,填填坑
2400 这题其实很简单,然而......因为是异或运算,所以每一位独立然后就是最小割了(捂脸
4036 坑好多啊再挖一个据说设vfk论文原题233大爷链接
3594 这个题还是挺可以的如果能猜到每次必须加的区间一定是一个后缀那么就简单了丢链接跑2333
4815 这个题很棒棒啊我一定要写个代码233
3190 yy了一波做法,最后发现yy出来的其实就是半平面交233判断直线是否有一段没有被任何直线覆盖
3532 首先如果没有字典序最小的限制的话就是一个拆点最小割(现想的233)然后进行排序之类的挨个扫一遍如果是满流的就选上lca:“现在问题在于如何删除一条边并维护最小割(最大流)方法是:要消除u->v的边,就分别从u->S,T->v做最大流”
3533 留个坑吧 我只知道能在凸包上三分 但不会维护啊 坑好多啊
3534 这个啊guass消元矩阵树定理233
4817 操作1神似lct的access操作所以就可以access重边连相同颜色的儿子,其他都是虚边所以一个点到根的权值就是跨越虚边的数量所以可以树链剖分搞搞子树也可以树链剖分
3991 这个题需我竟然没想出来因为他要用虚树233
4519 自己口胡出来个做法 就是随便选两个点,然后做一次最小割,可以把点分成两个集合 跨越两个点集的答案就是这个值,其他的递归处理 这样分成的两个点集大小期望来算是n/2的 所以均摊log的吧,不知道233
2217 这题思路挺好的预处理一下每个T后面有多少个连续的T,记为f数组然后挨个枚举前缀和,如果是T,当前的值是sum 则前缀没出想sum-1 1、如果f[1]<f[i]则可以在前面一个W来替换T 2、f[1]>=f[i] && i + f[i] <= n 这样就可以在后面找到一个W来替换T
4052 以一个点开始的序列gcd变化不超过log次然后就可以枚举乱搞了
3514 这是个好题以边的编号为权值维护最大生成树用LCT和魔法森林差不多,记录一下加入这条边后cut的边的编号如果没有cut边,那么a[i]=0(假定记在a数组)然后建一颗主席树答案就是[l,r]之间<l的a[i]有多少个用n减去就是答案,注:a[i]<l就表明加入i这条边进行了一次合并
3510 就是有link操作然后求重心neither_nor::一棵树插入一个叶子节点之后,重心要么不变,要么向叶子的方向移动一条边,移动的条件是叶子所在的子树大小*2大于这棵树的大小(或者相等取编号小的)
3656 这是一道好题可以打表发现生成的数字线性无关然后就是Lucas定理大爷证明
3689 这是个好题tire树可以查第k小所以这样,再这样,就可以AC了
1283 网络流敲秒建图题
3530 竟然还可以再AC自动机上dp用数组建AC自动机然后f[i][j][k]表示到第i位,匹配到状态j,当前位k的方案数
4383 这题要线段树优化建图待填坑233
3930 这种东西可以莫比乌斯反演然后用些小技巧233
2904 这题听说是各种定理硬套题解:JudgeOnline/upload/201604/sol.doc真是爆炸,丢链接跑
4764 lct维护动态环套树
4737 大爷链接由lucas定理的推论,C(i,j)不是k的倍数当且仅当k进制下i的每一位分别>=j
4513&&3652 有这些规律,这是棒棒的大爷链接
2177 题意就是标题会发现每个点至于八个方向最近的点的连边有可能在最小生成树种然后就可以xjb搞了
3578 集合哈希?这个题要哈希一群人怎么办呢就是给每一个人随机一个值然后用着群人的异或来充当hash随机时一定要用奇怪的方法写
4569 终于发了个有代码的最近是和并差集刚上了首先暴力可以并差集所以正解也是并查集二维的,f[i,j]表示i开头往后2^j个的情况最后往下传一下就OK了
2653 首先b格比较高的暴力是二分答案然后把区间变成+1-1什么的所以就可以建主席树,按权值建,这样二分一个答案就可以查相应的+1-1要找的东西了
3720 奥秘重重的树分块呃呃呃
3714 这题最小生成树,想不到吧就是要求出所有s[i]的值询问ij表示查询s[j]-s[i-1]的值,而s[0]已知所以让所有点联通就好了
4802 这个很有趣啊PRho粘个板子
1336 随机增量法假n^3--->n
1142 nkc:“若干次交换之后,之前在同一行的肯定还在同一行,之前在同一列的肯定还在同一列所以我们通过每行第一个元素来判定交换后的每行对应之前的哪一行,再通过第一行的元素来判断交换后的每列对应之前的哪一列然后判断一下是否合法就可以了”嗯,就是这样
3489 被教做人了233一开始以为就是个主席树可持久化树套树大爷链接
3549 突然感觉自己不会单调队列,TMD,今天三个单调队列题都没有一眼秒
3543 这个题好啊一眼觉得扫描线其实是要用些奥秘重重的指针我还是挂链接好了
4278 第一次我看错题了不会做,其实就是后缀数组贪心一下证明看这个吧,我懒
4550 这个首先有个暴力建图还有这种方法来建图:直接每个点依次排开,i->i+1连(k,0)【k是流量限制,0是费用】的边,然后对于一个区间[l,r]就l->r连(1,val);然后源点->1连(k,0),n->T一样,跑一边最大费用最大流即可。经过每个点的流量都保证了不超过k
4276 这题排序二分图匹配就可以A了搞什么大事情,还用线段树优化建网络流的图233
4337 树hash把我吊着打
4320 这个题要分段处理在1~sqrt(n)这一部分可以暴力更新然后其余的倒着做把加点改成删点然后用并查集跳过空的位置查询是就直接find一下就好了两部分询问复杂度都是sqrt(n)
4310 这个题好棒啊首先由这个性质一个串中不同子串的总数=∑(len-height[i]-sa[i])然后就可以O(n)求第K大子串了其他就是二分lcp搞搞就好啦
4373 大爷链接其实就是差分后区间gcd是否为k的倍数证明略
2741 啊啊啊我自己几乎没想到过分块的解法这题还是分块然后f[i][j]表示第i块开头到j的最大值剩下的暴力出解(求最大值时用可持久化Trie树)
2095 嘿嘿嘿就是混合图欧拉回路丢链接跑
2458 分治然后更新中间CreationAugust:但是谁告诉我两边之和大于第三边那个剪枝为何这么强力…
3992 暴力的话是dp(i,j)表示用i个数字,乘积取模后的值为j的方案数然后这个是暴力n * |s|我们可以优化这个转移过程发现每次可以转移就是一个NTT;但这样复杂度更多,所以可以像快速幂一样搞,这样复杂度就是m logm logn好棒啊,其实一看那个模数就知道是NTT
2142 这个式子一推就推出来了,但是%的p不是质数,把p分解成Πpi^ci 的形式,然后就可以中国剩余定理了,还要注意一个细节就是n比pi大,那么C(n,m)怎么求呢?,把n!、m!、(n-m)!分解成 x * p ^ y 的形式,然后就可合并,避免没法求逆元的问题,还是不懂的话:大爷链接
3173 这个插入是按从小到大的,那么插入一个数后,之前的dp(lis)数组不会更改,而这个点的lis为前缀最大值,所以搞个平衡树去维护位置信息啊,,听说有BIT方法,先压到stack里好了
2962 没想到吧这个c很小,是可以暴力c^2合并的线段树维护,然后组合数搞搞有个奇妙的事情是,线段树其实可以把整个区间都存下来这样空间是nlogn的嘿嘿嘿
1486 首先二分答案把边权变成w-mid经典的01分数规划然后在图中找是否有负环即可hzwer:用dfs版spfa判负环
2275 据说是斐波那契博弈丢大爷链接跑
4827 这个啊,如果你推了式子就会发现c可以直接算出来其他的式子把常值取出来,就是这样∑ni=1x[i]∗y[n−i+1]嗯,然后fft好了
4017 按二进制每一位做丢链接跑
2555 lct + sam真是爆炸
2115 昨天CF
4993 我是傻了吧,满脑子贪心,连dp都不会了f[i,j] 表示A到i,B到j最多能连多少个,然后大家都会了
3531 这个啊,就是树剖,然后用线段树维护QAQ对于每个宗教都用一颗线段树维护,然后动态开点T.T
1251 splay模板??
3910 因为每个点只会被染一次,所以染过的点就可以与上面合并所以并查集一下,每次暴力合并到lca即可
2589 在线莫队算法,奥妙重重还yy了好久点分治最后放弃看题解全tm点分块看我bitset搞过他TMD,bitset MLEQAQ
3887 首先先缩点然后做一次最长链然后反向做一次最长链(相当于走回去)然后枚举每条边用两次最长链的和更新答案
3329 因为异或是不进位的二进制加法,那么因为结果正好和加法相同,那么说明x在二进制上没有相邻的1。那么简单的数位DP就可以求出满足这个的答案了。再看subtask2,根据打表找规律可得,这就是斐波那契数列的第n+2项(以首项是0来说)。那么只需要O(2^3⋅lgn)的矩阵乘法就可以了。QAQ,粘别人的
3007 二分答案+平面图转对偶图大爷链接,待填坑让我看就放1e6只蚂蚁随便跑一跑看能到达不
3192 我就是个sb原来堆可以放中间,我还满口平衡树“题解:一开始没啥思路,但可以确定这题就是个模拟。。刚开始就是卡在了元素的移动上。。突然发现把第一组数倒着输入,后一组正着,把顶放在中间,移动的问题就完美解决了。。比如样例,数组中存5 4 1 2 7 3移动就是改变分割点,整个操作用树状数组实现。”
1237 好水啊,我好像天天划水这个就是先拍个序,然后发现超过三个不对应一定不是最优然后就可以xjb搞了
1857 首先三分然后再三分最后AC
1856 这尼玛不就是卡特兰数的定义吗?蛤蛤蛤,我又被嘲讽了这个讲的秒啊
1082 这题dfs,二分答案,然后搞搞dfs,xjb写写
1297 一眼就知道是矩阵乘,拆点就好了,反正点少
2756 为什么这题题解都是dfs呢,刚才我看错题了QAQ预处理出所有幸运数字,然后dfs就是了
2453 这题一眼就知道用带修改的莫队去做,但是奥秘重重的是就有像hzwer一样写分块的人直接挂链了
1367 左骗术,没想到吧,待填坑
1455 这就是个可并小根堆,您强您写斐波那契堆,反正我只会左偏树,而且没有自己写
1941 靠,没想到那个起始点一定是隐藏点中的一个,然后就简单了
2850 第一次知道KDT还可以这么搞
2738 二位树状数组+整体二分,或者二维分块?妈呀
3784 这题好啊就是点分治,和[NOI2010]超级钢琴做法相似维护堆,记录在点分治区域的根和能到达的序列(点分治时记录该区域dfs序)还是不会就看别的题解吧,我讲不清楚了
2093 首先得O(n)求这个第k远点我好差啊,没想到可以用双指针其实我感觉接下来建个图找个带1的环,但发现不好弄,题解都是写的倍增,比如这个,优化空间非常棒
1977 首先求一个最小生成树然后枚举一条不在最小生成树上的边,假如它连着x和y那么我们求出x和y直间相连边的最大值用这个替换来更新答案,如果这个还是个最小生成树,就再求一个严格次大边更新答案
2212 这题可以暴力线段树启发式合并
1831 注意这个题的n<=1e4暗示是n^2做法首先可以考虑到空位所填的数一定单调不降这个可以用证明的,证法和其他需要排序贪心的题差不多(懒得写了)然后dp,预处理每个位置i填j会增多少个逆序对,有上面的性质,所以可以求出然后就能口胡出一个n^2 dp了
2789 首先如果没有重复字符那么直接逆序对就好了有重复字符可以贪心的想到必须是最近两个相同字母的进行配对然后就easy啦这个写法比较好
3809 一开始想了个莫队+树状数组网上讲会超时可以对美丽度进行分块然后莫队转移时就是O(1)修改复杂度 O(nsqrt(n)+msqrt(n))
1797 jcvb:在残余网络上跑tarjan求出所有SCC,记id[u]为点u所在SCC的编号。显然有id[s]!=id[t](否则s到t有通路,能继续增广)。①对于任意一条满流边(u,v),(u,v)能够出现在某个最小割集中,当且仅当id[u]!=id[v];②对于任意一条满流边(u,v),(u,v)必定出现在最小割集中,当且仅当id[u]==id[s]且id[v]==id[t]。①<==将每个SCC缩成一个点,得到的新图就只含有满流边了。那么新图的任一s-t割都对应原图的某个最小割,从中任取一个把id[u]和id[v]割开的割即可证明。②<==:假设将(u,v)的边权增大,那么残余网络中会出现s->u->v->t的通路,从而能继续增广,于是最大流流量(也就是最小割容量)会增大。这即说明(u,v)是最小割集中必须出现的边。挂个链接
3143 先求出到每个点的期望次数这个可以列出n个方程然后用高斯消元解决然后就可以求出每条边经过的期望次数然后贪心编号就是了
1202 这题并查集,没想到吧就是如果两个区间挨着,那么可以合并,所以并差集
3229 这TM毁人三观,四边形不等式完美超时,看这个吧,我语文烂
4836 这题如果没有不是分类的话两种都是板子但是要分类233所以就分治“
那么我们就考虑分治,对于权值区间[l,r],对x在[l,mid],y在(mid,r]里的做一次fft,对x在(mid,r],y在[l,mid]里的做一次fft,这样就算出了跨mid的所有数对对答案的影响,然后递归[l,mid]和(mid,r)即可复杂度T*mx log^2 mx,mx为最大权值用了对实序列的FFT优化和读入优化才卡进去,时限8s跑了8900ms……但是感觉复杂度上不太能更优了?(可能是我太愚蠢了)应该是有常数更小的做法把”
3289 被爆艹还在想交换次数是不是逆序对个数结果大家都说显然是啊然后就莫队搞搞
3210 将(x,y)转化成(x+y,x-y)可以将切比雪夫距离转化成曼哈顿距离(自己推一推),A、B的切比雪夫距离就是A、B曼哈顿距离的一半。那么可以将x、y分离处理,排序中位数即可。注意如果最后选的最优的X、Y代回去不是整数,要在其上下左右中选个最优方案。
3238 反串后缀自动机的suf是后缀树所以在后缀树上dp这个代码很好
3998 先建个SAM然后算一下每个点能到的状态数然后瞎搞
3944 杜教筛,真TM毒瘤看看洲阁的论文??
2956 为啥我就老是想不起来n%i == n/i * i啊啊啊啊啊啊啊啊
2333 堆标记?2333
2342 p[i]表示i和i+1为中心的最长回文子串长度/2(str[i-k]=str[i+1+k])。。。用manacher On计算p数组题目要求计算w wR w wR的最大长度枚举x为对称轴。。。实际上对称轴在x到x+1之间,即x是第一个wR的最后一位举些例子推一推发现len(x+1,y)*4能更新答案,仅当y-p[y]<=x且y<=x+p[x]/2按照y-p[y]排序一下,递推x的时候将符合1式的y插入set,在set中查找x+p[x]/2的前驱更新答案即可复杂度On+nlogn
3207 想了两个log乘k的做法,被吊着打(其实因为理解错题意了)把每K个hash丢到主席树里面然后查一查就好啦
2733 并查集+平衡树(set)启发式合并splay维护当前连通块的权值启发式合并其实就是把小的往大的里面塞splay是nlogn的,其他平衡树都是nlogn^2
4551 倒着做,然后如果这个点没有标记了就会父亲合并这样用一个并查集维护就好了,被吊着打
4916 杜教筛,待填坑
3172 暴力做法:建fail树,然后使劲跑?其实就是在建的时候把每个点的cnt设为1然后按队列倒着跑一遍fail->cnt+=cnt然后就是每个串的答案就是cnt
4765 普通方法:修改点权 logn, 查询 nlogn综合一下进行分块把1~n进行分块,统计每个点在每个块内出现了多少次记块的大小为B修改 B ,查询Blogn
4766 待填坑竟然发现自己知识漏洞pruf啥啥,生成树xx
2809 因为是点的个数,所以可以用堆来贪心:当费用超过m时删去最大的肯定会合并子树所以用可并堆
2763 k 比较小 嘿嘿嘿做k次最短路?or 一次dijstra?找了一个网上比较好的代码
3626 这题好啊可以把一个询问拆成前缀和相减离线讲询问按z排序依次插入1到n每次插入讲该点到1的路径上每个点的点权+1查的时候就是z到根路径的点权和不写了不写了
2819 像这种可以查到根路径进行叠加的其实就是查一个点到根路径修改只影响子树,所以dfs序?
2821 分块可以预处理f[i][j]表示第i ~ j 块 的答案
3224 splay 先不写了233
2746 fail 树上lca
2565 Manacher
2506 分类暴力1.当 p>=100 就可以暴力计算有多少个a符合2.当p<100 维护一个f[i][j] 表示 %i==j的有多少个奥妙重重
4543首先如果直接treedp是 n ^2 的但是可以进行长链剖分“重”儿子的dp数组可以直接考过来(第一次转移不影响)其他儿子的转移就是最大深度差总体是O(n)的具体可以参加 alone_wolf 的博客
4568 大力合并线性基,终于在60s的时限下用27s+跑过而rank1 只用了2s点分治可以避免线性基的和并,好东西
2286 虚树:\(\sum K \leq 5e5\), 而每次直接treedp \(O(n)\),有很多浪费的,所以建新图把关键点存下来,像这样,先按照dfn 排序然后这样:等会儿补下
4556 如果没有d的限制一定是在[a, b] 中选一个rank离rank[c]最近的,这样就是随便搞然而d的限制有(ken)可(din)能(hui)越界导致WAd的限制就得再取个min所以可以二分答案避免这个min二分到mid 就在[a, b-mid+1] 这个区间里面找所以就是这样:后缀数组--> ST表 --> 二分答案 --> 主席树,不想写了
1670 写个凸包散散心
4016 我好SB啊,还是写不对啊
2882 写个后缀数组不停TLE,难道我看错题了??
2716 && 2648 正解是分4次做cdq,我实在不想写了顺便学个kdtree抄的hzq给的模板
3101 传送门:N皇后的构造解法
1176 && 2683 CDQ 分治 三维偏序的SB题,我竟然因为数组少写一个0调了10min,等下去学下强制在线怎么做QAQ
3585 && 3339 这题我看了好多题解有莫队做的,不管他,有一个做法很棒,就是主席树用主席树维护每个数字最后出现的位置。每次查询时,用右端点那颗(函数式)线段树,在0~maxn里面二分看最后出现的位置的最小值是否<l复杂度 O(nlog(maxn))
1951 crt先记在这里,等会儿再写
1901 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是多少(1≤k≤j-i+1),并且,你可以改变一些a[i]的值,改变后,程序还能针对改变后的a继续回答上面的问题。如果没有修改直接搞个主席树就可以了,修改的话有两种做法第一种:树套树。第二种:建一个动态主席树:外层用树状数组维护位置对于树状数组的每一个点建一个主席树查询时像主席树那样答案(先把在树状数组内的主席树根的编号存下来)复杂度 :修改 or 查询 O(logn^2)
3166 我SB听课时没听懂题把所有值排序倒着插入每次插入时查一下向前第二个比他大的数的位置L和向后第二个比他大的数的位置R,这个可以用平衡树 or set 解决然后在[L+1,R-1] 用可持久化trie 树(感觉和主席树没啥区别)查一下就好QAQ
1962 题解
4818 注意到题目中的p很小,那说明这么大的m是没用的用线性筛预处理m以内的素数枚举每个数字,mod p之后记录到一个数组里面记f[i][j]为前i个数字的和为j的方案数转移显然可以矩阵乘法再统计一个g[i][j]含义相同,但是强制每个数字都是非素数f[n][0]−g[n][0]就是答案了
1532 二分 + 网络流建图 : S 向每个人连mid人向比赛连1,比赛向T连1最后判断最大流是否为m也就是每条边是否被分配到像这种二分完的判断一定要多角度的思考
1529 容易发现每个联通块都是一棵外向树,我们只需要砸开环上的任意一个节点就可以打开这个联通块中的所有储钱罐问题转化成了求一个图的联通块个数 上并查集即可
1103 “比如样例的dfs序列就是1455422331。则点4进入时间为2,退出的时间为4。然后将进入的权值赋为1,退出的赋为-1,。每次修改公路,就把这两个值都修改为0.对于询问a,只要输出a的前缀和-1即可(-1是要把点1这个多余的权值删去)。”这样就维护了点到根的路径情况,get到新姿势
3262 终于写对cdq分治了感谢hzq大爷的指导
2796 用map存状态学到了
1334 背包dp只要从 sum/2 + a[i] ~ a[i]转移就好感觉自己学的好肤浅啊QAQ
3529 把问题按照 A 排序, 把F(gcd(i,j))排序,数状数组维护前缀和(虽然我用的zkw区间查询QAQ)
3174 这题贪心+DP,先将小矮人排序:使得如果能逃掉i个小矮人,逃前i个代价最小这样只用比较 A + B 的大小(小的排在前面)但不能保证能逃掉多少个小矮人所以用 dp 统计答案dp[i] 表示 逃掉 i 个人后最高能搭多高(不包括手臂长)