07 2019 档案
摘要:A. City Day 用了st表//是不是麻烦了 建表然后O(1)查询这个数前面x个数的最小值和后面y个数的最小值,注意边界和x,y为0的情况。 1 #include<bits/stdc++.h> 2 #include<iostream> 3 #include<stack> 4 #include<
阅读全文
摘要:一、Dijkstra 🍓 单源,O(n^2) 思路就是找到一个点,先放它所有的位置 1 #include<bits/stdc++.h> 2 #include<iostream> 3 #include<stack> 4 #include<algorithm> 5 #include<cstdio> 6
阅读全文
摘要:简单的情况不用前缀和,直接暴力就好,数据范围大的D2,就用前缀和数组存不满足三种情况的数,最后减一下取小就可以。 1 #include<bits/stdc++.h> 2 #define mem(a) memset(a,0,sizeof(a)) 3 #define ll long long 4 #de
阅读全文
摘要:1. 康托展开 X = A[0] * (n-1)! + A[1] * (n-2)! + … + A[n-1] * 0! A[i] 指的是位于位置i后面的数小于A[i]值的个数,后面乘的就是后面还有多少个数的阶乘 tips:这个算出来的数康拖展开值,是在所有排列次序 - 1的值,因此X+1即为在全排列
阅读全文
摘要:关键即: dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i-1][k]+a[i].p*(j-k))//第三种是第i个人刷k+1到jx[i]<=k<=a[i].s-1 a[i].s<=j<=y[i] 这题跟hdu-3401很像,构成单调队列的方式就是把第三种情况dp[i-
阅读全文
摘要:1. 思路:对于不超过n的每个非负整数p(>=2),删去除1*p外所有倍数,处理完所有数后还剩下的就是素数。 2. 复杂度:内层循环次数是 ⌊n/i⌋ - 1< n/i,O(nlogn) 3. tips:①素数定理 Π(x) ~ x/lnx, 即不超过x的素数个数与x/lnx比较接近
阅读全文
摘要:👩⚕️👩🎓💂♀️ //写完入门后,这道一直想补,终于拖到了现在d ( ̄▽ ̄*)b 分块维护每一块的众数(第i块到第j块的众数),所以中间的块预处理就可以得到,旁边的块我们暴力枚举,但这样前面预处理得到的还需要统计它出现次数。这个我们就可以用到二分来找,找中间块最多的那个数,二分找在[x
阅读全文
摘要:👩💼 思路:最小是交点的那个±1小区间里,是真的没想到😭。这题我觉得关键是考虑c,即a+b,因为c的存在,a和b不可能同号,因为步数最少嘛。但我们用a和b,但是在同号时取两者中|最大|,即|a+b| + |最大|的剩余部分,异号就全取。 //被坑惨了,找了一个多小时的bug,竟然错在lld上
阅读全文
摘要:一、分块 核心就是找到分块要维护的东西。想象一列数字中,我们取出其中相同的一组,我们要在给定范围内取不超过k个,如果暴力从左往右判断然后记录个数,很不现实吧。那我们就开个数组记录这个数在此组中的位置+k个后会不会超过这一组的个数,但之后统计的关键不是“从左往右”。如果碰到的数+k后还在区间内,我们不
阅读全文
摘要:1. 一条数学公式:如果有 a%b=c, 则有 (a+kb)%b=c(k 为非零整数) 2. 用途:求解一次线性同余方程组,需要将模数转化为素数来求解的题目 3. 核心:求 (N/mi)∗yi≡1(mod mi) 中的yi --》 扩展欧几里得 --》 看成 yi(N/m1)+q⋅m1=1 (若mi
阅读全文
摘要:总结自🍑 1. 引入:求 (a/b) %p 》 “除以一个数再取模等同于乘以这个数的逆元再取模” // 这里b很大,暴力╮(╯-╰)╭ 2. 求法:设 inv[b]是b的逆元,那么(a/b)%p = (a*inv[b])%p // 叫法是 一个数b在模p的条件下的逆元是多少 一个数的逆元可能有若干
阅读全文
摘要:总结自这两篇:👨✈️👩💼 mark一下这篇:👨🚀 一、扩展欧几里得 1. 辗转相除法(欧几里得算法)的证明: 2. Ex_gcd用途:求关于 ax + by =gcd(a,b) 的所有整数解 思路:令g=gcd(a,b) ,若我们已知该方程一个特解x0,y0,则我们可以用某种方式求出
阅读全文
摘要:一、区间DP 1. 石子合并 (1) 相邻成圈取🏐:这道让我一直纠结于dp的最优子结构和贪心的局部最优,实际上到现在还不太能讲清楚,不过,像田忌赛马一样? 思路是:把圈石头变成直石头,以两堆合并到n堆合并为阶段,从l堆到r堆合并为状态,判断用k在l r之间分割并判断为决策。 1 #include<
阅读全文
摘要:🎈 写在纸上了 1 #include<bits/stdc++.h> 2 #define mem(a) memset(a,0,sizeof(a)) 3 #define mem1(a) memset(a,-1,sizeof(a)) 4 #define ll long long 5 #define mp
阅读全文
摘要:1. while循环中的m--和--m //虽然真的超基础,但一不小心(可能只有我)就会忽略上面那个包括m=0吧 ( ̄ε(# ̄) 2. 读入未知个数的数字,其中间隔空格数未知🍓 用ungetc()函数 //把读入的这个值放回流里,但是c还是保留该值 1 #include<bits/stdc++.h
阅读全文
摘要:学习了这篇📕,然后结合学长教的。 一、一维st表: 用st[i][j]表示从i开始,1 << j 个连续数的最值; 设我们求某一区间的最值,则可拆分成这个区间前半区间和后半区间的最值,然后再继续拆,就很logn了。 然后写的时候就先给st[i][0]赋a[i],然后从小区间到大区间循环,把st“n
阅读全文
摘要:一、单调栈 例 -- Largest Rectangle in a Histogram:学习了两种写法(思路):按从低到高排列矩形。 (1) 🎈 栈s里保存的矩形,都是按从低到高排列的,但是新加入一个矩形a[i]后,它可能比现在栈最后加进来的数要大,也可能要小于等于;主要是每个矩形都要按自己的高度
阅读全文
摘要:追逐游戏啊,🚬 //沧桑脸 下回把dfs,bfs,dijkstra都写一遍~ //DFS和BFS区别 (1)dfs学了这篇:https://blog.csdn.net/mengxiang000000/article/details/72901402 但是。。。我没有理解遇到两人到某点距离一样,就更
阅读全文
摘要:今天又写了一遍,才差不多看懂这道题,不过stl的选择真的好难,靠经验么? 这题的核心就是 sum[r]-sum[l] = pow; 因为r在l的后面 所以要先由r来找l,在放入l,即转化为sum[l]=sum[r]-pow; 1 #include<bits/stdc++.h> 2 #include<
阅读全文
摘要:汤姆波利伯~题目在这里。 一、三分 关键是找到x轴和y轴的表示意义,x轴表示的是最终得票数,y轴是花费 联系题意和要求,题目给我们的就是投给谁和花费,那我们的已知也只有这个,要找的就是最好的一种组合,既能保证赢,花费又最小,而这个组合减或增都不满足这两个要求最优,不是单调的,所以可以想到是一个开口向
阅读全文
摘要:纠结了一下午,没想到代码就那么短,我也太菜了。。。 主要就是num2表示t2前所有可以整除i的值的个数,num1同理,但是要考虑t1可不可以整除i,若不行,则num1会落到前面整除的数上,不在[t1,t2]里,则最后num2-num1+1会多出一个,所以如果不能整除则num1要++
阅读全文
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=2002 分块( √ ) LCT() 动态树() 一、分块: 分块重要的是确定我们建立的数组要完成什么使命,这题是问从某点弹出序列需要几次,并要提供修改操作。既然分了块,那我们就要把操作缩小到块的范围,
阅读全文
摘要:1. 根据数据范围选择做法 2. 1s大概小于 10^8,最好1^7 3. n <= 30 指数 dfs+剪枝 n = 100 -> n^3 floyd(图论) n = 1000 -> n^2,n^2logn 循环 n =10000 -> n* sqrt(n) 块状链表 n = 1e5 -> nlo
阅读全文
摘要:晚上脑子涨涨的,就总结一下最近写的分块入门9题吧。以下全是个人浅薄理解。 分块,一般就是把一组数据分成sqrt(n)块,然后根据题目要求,对其进行维护。基本要写的就是belong[N],还可以写l[N],r[N]来保存每一块的左右边界,要注意最后一块的有边界要设置为n。 tips:写blo=sqrt
阅读全文
摘要:图解:https://blog.csdn.net/niushuai666/article/details/6662911 实现:用 pre[N]数组记录一个数的上级是谁,要想知道最高级,需要一级级查上去。
阅读全文
摘要:题目: ①348A.Mafia tips:逆向思维,已知想玩的局数,则可推知最大当裁判的数量,裁判总数大于假定局数k,则k左移。因为要求临界值,所以二分(?);r是莽设的,非已知;注意r传过去时,要开ll. return l/r都行。 1 #include<bits/stdc++.h> 2 #def
阅读全文

浙公网安备 33010602011771号