租酥雨最近很懒qwq,具体表如今写题的时候不想发题解了。
可是想一想这样也不太好,就决定发个一句话(半句话到几句话不等)题解上来。数组
2018-09.18-2018-09.28网络
能够证实答案就是差最大的逆序对的差的一半。函数
至关因而要选k个不一样的数使它们和为0.正负分开,设\(f_{i,j}\)表示选\(i\)个数和为\(j\)的方案数,转移是\(f_{i,j}=f_{i,j-i}+f_{i-1,j-i}-f_{i-1,j-n-1}\),分别是给每一个数加1,给每一个数加1再插入一个1,以及不能让最大值超过n。算答案就枚举正负分别选多少而后背包卷一下,注意能够选一个0.布局
直接爆搜每一个点选取方案,复杂度是\(T(n)=2T(n-1)=2^n\).再作一个树上背包就行了。优化
莫比乌斯反演+Pollard_Rho分解质因数,已经写了详细题解,此处再也不赘述。spa
这不是POI的原题吗?决策单调性瞎搞。指针
两个数加起来是质数就连一条边,至关因而要求最大独立集,若是只有不超过一个1的话原图必定是二分图(按奇偶),而超过一个1是没有意义的(1不能重复选),因此就直接dinic了。orm
从高位往低位一位位肯定。假设选出的n个数按大小排列,咱们用一个长为n的二进制数来表示当前每一个数和下一个是否相同,最后一个数和R是否相同。发现每一个0跟每一个1的转移都是同样的,因此能够直接矩阵快速幂,复杂度\(O(2^{3n}(|S|+\log k))\)排序
每一个数都是独立的,答案必定是\(w^n\)的形式。观察发现答案就是\(2^{nk}\),能够列出递推式而后概括证实。继承
按拓扑逆序处理,按照必定顺序访问出边,用bitset存可到达的点,若是某条出边的加入并无使可到达的点增多,那么这条边就能够删除。访问顺序按照最长路的顺序。
直接树dp+贪心便可。注意若是选了某个子树的权值为0那么也说明不惟一(能够不选)
有两种状况,一种对全部长度为L的区间求答案,另外一种状况,区间的两端点必定分别是最大值跟最小值。分数规划后推一下式子,至关因而要最大化前面的\(a_i-mid\times i\),用单调队列维护。
对字符串建Trie树,有多少串包含这个前缀至关因而有多少包含在Trie树上这个节点的子树里。主席树维护到根路径上的信息,每次查询减一下lca。
枚举起点,\(\gcd\)日后走至多只会变化\(\log\)次,因此暴力二分找到最远点更新答案就好了,gcd用\(ST\)表求,复杂度两只\(\log\)。
假设某个女嘉宾的如意郎君有\(x\)我的,那么选到第\(i\)我的的几率就是\(\frac{p(1-p)^{i-1}}{1-(1-p)^x}\),二维偏序便可。
贪心,按照美观度依次选取最大的能放进去的放。
离线询问,考虑每种颜色对答案的贡献,用树状数组维护。
从后往前贪心放0.注意特判L和R位数不相同的状况。
分块,对每一个块维护块内\(\gcd\),块内异或和,以及一个块内元素按照块内异或前缀和的排序数组,修改直接重构快,查询分两种,若是块内的前缀\(\gcd\)都相同就在排序数组上二分,不然暴力,由于会使得前缀\(\gcd\)改变的块至多只有\(\log\)个,因此复杂度\(O(n\sqrt n)\)。
建出\(fail\)树就是两点\(lca\)。
令\(A=m(m-1),B=(m-1)(m-2)+1\),题目就是在求\(A2^m\sum_{i=1}^{n}B^{i-1}i^m\)。\(m\)较小\(p\)较大能够接受\(m^3\)的矩乘,主要在于用杨辉三角构造\(i^m\);\(p\)较小能够求出循环节而后倍增(由于肯可能不存在逆元不能等比数列求和)
第一问答案恒定,非根节点贡献儿子个数/2向下取整,根贡献儿子个数/2向上取整。第二问先二分再贪心匹配,匹配时还要二分父向边和哪一个儿子匹配,细节较多。
对每一个点求:若是这个点到达根后数量为K则到这个点的蚂蚁数量的范围是多少,乘爆了能够直接设成inf,对于每一个叶子节点二分便可。
分治,每次考虑跨越mid的区间。i从mid循环到l枚举左端点,记左边的最大最小值为mx和mn,右边用单调指针维护最后一个小于等于mx的位置j和大于等于mn的位置k。右端点<=min(j,k)直接等差数列求和,>max(j,k)就是右边最大最小值乘积的后缀和,中间依照jk的相对大小多是最小值或是最大值的区间和。维护六个东西:最小值、最大值、最大值乘最小值以及分别乘下标的前缀和便可。
分数规划以后作遍背包,\(w_i\)超过\(W\)的直接当作是\(W\)。
折半搜出全部不超过\(10^{18}\)知足条件的数而后二分求答案。
维护每一个数向左向右第一个不是本身子集的数的位置,从大到小分治作就好了。
找区间最大值,暴力for小的一半,每次至关因而查询区间\([l,r]\)内等于\(v\)的有多少个。离线下来能够作到一个\(\log\)。
分治\(FFT\)板子。精度貌似有点炸要\(MTT\)才行。
倍增+循环卷积。
\(l\)较小能够\(O(nl)\)dp,转移串长度小能够直接矩乘,矩阵大小为二倍AC自动机节点个数的平方。
能够证实区间长度大于等于14必定有解,不然就\(meet\ in\ the\ middle\)一下\(O(3^7)\)爆搜。
设\(f_{i,j,k}\)表示前\(i\)堆里丢掉的堆数模\(d\)为\(j\),异或和为\(k\)的方案数。由于\(\sum a_i\)不是很大,因此每次枚举\(k\)就最大只枚举到\(a_i\)的最高位那么多,复杂度是\(O(\sum a_id)\)的。转移的时候异或的两个数能够一块儿转移,就不会卡空间了。
堆模拟搜索。先求出答案,而后找字典序最小,由于有了答案的限制,因此能够爆搜,状态数不会超过\(k\)。
\(f_{i,j}\)表示剩下\(i\)我的时第\(j\)我的活的几率,随便转移一下就行了。
傻题不讲了。
维护一个第一象限的凸壳。
组合计数,按高度从高到低考虑便可。
能够发现交换顺序是没有关系的,因此每种本质不一样的方案就给答案贡献次数的阶乘。从小往大的交换每次至多\(4\)中决策,复杂度\(O(4^n)\)
暴力预处理\(SG\)函数就好了。
首先\(x,y\)坐标独立者很显然,而后由于个位数字含有的质因子只有\(2,3,5,7\),因此最后有金子的位置必定只含有这四个质因子,而在\(10^{18}\)内这样的数很少,因此直接数位\(dp\)一下记下状态。前\(k\)大就固定\(x\)坐标,用堆维护便可。
hall定理。须要倍长后再加倍才能保证整个环都匹配上了。
线性规划网络流。
上一题的增强版。课件里面讲了。
边双缩点而后树上换根\(dp\)求最长路。
建出最短路径\(DAG\)后跑个最小树形图,由于是个\(DAG\)因此直接给每一个点选最小入边便可。
度数为\(m-n+2\)的非割点即为答案。
能够说是“最小生成基环森林”?总之是要保证每条边能够匹配每一个点,因此一个连通块确定是一个基环树。
须要知足的条件是最大值不超过总和的一半且共含有偶数个1。由于最大值不超过60因此不知足前一个条件的区间长度不会超过60,暴力减掉便可。
推一下式子,拿两个树状数组分别维护区间\(w_i\)之和以及\(w_i\times i\)之和。
先scc缩点,以后在正反\(DAG\)上跑出从\(1\)出发的最长路,枚举哪一条边翻转便可。
差分约束。注意图可能不连通。
先去掉被包含的区间,而后贪心\(dp\),转移分两种,一种是不选当前区间,一种是选,若是这个选的区间要和上一个选的有交那么必定会选一个左端点尽可能靠左的。
合法的方案就是存在一个长为\(k\)的颜色连续段,考虑计算不合法的,\(f_i=i^m(i<k),f_i=(m-1)\sum_{j=1}^{k-1}f_{i-j}\)。
假设前\(t\)大的分数的分子之和为\(U\),分母之和为\(D\),则若要知足条件则须要存在\(i,j\)知足\(\frac{U-u_i+u_j}{D-d_i+d_j}>\frac UD\),其中\(i\)是前\(t\)大之一而\(j\)不是。划一下式子发现是要求\(Du_i-Ud_i\)的前缀\(\min\)跟\(Du_j-Ud_j\)的后缀\(\max\),Claris老师说知足决策单调性。
发现操做的本质是交换两个前缀和,因此就判一下两个序列的前缀和是否是全等就行了。
对于一个固定的\(x\)它合法的\(y\)必定是连续的,因此只要算出最大值跟最小值就能够了。
用对数计算\(n\)在每一个取值下当前这种状况出现的几率,取最大的便可。
发现无论怎么说,移动到每一个点的几率都是\(\frac {d_i}{2m}\)。
分数规划,记录个方案输出时再转分数便可。
实际上就是给你一组\(a_i\)要你构造一组\(k_i\)使得任意\(i\)知足\(k_ia_i\ge \sum_j k_j\)。一个结论是\(\sum_i \frac 1{a_i}\le 1\)是能够构造出,不然不行。
答案确定惟一。先考虑只有一列的状况,至关于已知每一个格子及其相邻至多两个格子的雷数,能够按\(n\)模\(3\)的余数分三类讨论。列数不为一就先求出每行及其上下两行一共有多少雷,转化为只有一列的问题。
前缀后缀\(\gcd\)只会变化至多\(\log\)次,因此就暴力\(\log^2\)搞一搞好了。
每一个括号序列消完后必定是一段前缀右括号跟一段后缀左括号。能够理解为:你要接受当前这个括号序列做为下一个串,就要先付出前缀右括号数量的左括号,而后能够获得全部的后缀左括号。按左括号总量是增多仍是减小分两类,对于左括号增多的,确定是优先选前缀右括号数量少的,而对于左括号减小的,你倒过来看就是右括号增长,因此是优选后缀左括号数量多的。排完序后大力作个\(O(n^3)\)背包便可。
考虑用平衡树维护序列。每个修改对于\([1,k)\)的数没有影响,对于\((2k,+\infty]\)的数在全局的相对大小也没有影响,打标记便可。须要修改的数是\([k,2k]\),把这段区间抠出来暴力改。发现这样一来每一个数至多被暴力修改\(\log\)次,因此复杂度就对了。
(洛谷上数据范围是假的,这个题明明就是\(2\times 10^{18}\))把\(M\)质因数分解,而后分子分母也一一分解,若是约分后分母与\(M\)的\(\gcd\)不为\(1\)则无解,对\(M\)算一下\(\varphi(M)\)直接算逆元便可。
暴力\(O(n^2)\)换根\(dp\)就过了...
考虑每一位是否是\(1\)。首先对序列作前缀和,根据这个数在当前这位是\(1\)仍是\(0\)能够肯定另外一个前缀的取值范围,树状数组维护便可。
对反串建\(Trie\),每一个点能够接他的父亲/儿子/兄弟,跑个树\(dp\)。
线段树合并。
(为了作下面那道题跑去写的)\(dp\)套\(dp\)。考虑求\(lcs\)的数组\(f_{i,j}\),其相邻两位的相差不会超过\(1\),因此差分一下就能够用一个二进制串表示一个\(lcs\)的匹配状态。复杂度\(O(n2^m\times4)\)。
和上面那题同样,再多开一维状态记串\(NOI\)的匹配状态。
\(hash\)以后简单\(dp\)便可。
考虑\(x^ay^b=(n-y)^ay^b=\sum_{i=0}^a\binom{n}{i}(-1)^{a-i}y^{a+b-i}\)。因此只要能求出\(y\)的若干次幂就好了。矩乘便可,矩阵大小为\(2(a+b+1)\),较卡常,须要尽可能减小取模次数。
其实连\(\sum_{j=1}^nf(\gcd(i,j))\times g(i)\times h(j)\times x_j=b_i\)均可作呢。
讲道理作三次反演就行了,中间要判一下无解的状况(除零)
考虑经典的\(lcs\)求法,设\(f_i\)表示长度为\(i\)最后一个元素的最小值。
对于一个\([L,R]\),找到最后一个小于\(L\)的位置\(p\),那么\(f_{p+1}\)能够被更新为\(L\),\(f_{p+2}\)被更新为\(f_{p+1}+1\),直到最后一个小于等于\(R\)的位置\(q\)。
至关因而区间平移,用平衡树维护便可。
线段树优化连边,须要建两棵线段树,一棵入边一棵出边。\(01\)最短路能够作到线性复杂度。
维护边权\(\times sz_i\)以及边权\(\times sz_i^2\)的区间和便可。
\(O(n\log n)\)点分治。听说长链剖分能够作\(O(n)\),然而我并不会\(O(1)\)继承长儿子啊怎么办。。。dalao们教教我吧
网络流,最小割建图。
选\(m\)个不动,剩下的错排。
分解质因数而后\(dfs\)。