摘要: 简介: 莫队这个算法是莫涛提出的。 用于处理一类不带修改的区间查询问题的离线 算法,其核心在于利用曼哈顿距离最小生成树 算法对区间处理顺序进行处理 。 ——zrt课件 这个算法本质上其实是暴力,但是由于可以离线处理循环的顺序,使得复杂度可以从n^2降到n^根号n甚至更低。 对于可以找到以下特点的题可 阅读全文
posted @ 2018-05-13 12:08 *Miracle* 阅读(716) 评论(0) 推荐(0)
摘要: 可持久化线段树,意思是可以查询历史记录的线段树。又叫主席树。我们可以通过记录不同的根节点,并在每一个更新到的节点处新建必要的节点。询问不同版本的主席树,只需要进入不同的根节点即可。 例题: 给定n,m,输入n个数组成的数列,有m个询问,每次询问l,r这个区间中,第k小的数的值。 分析: 这个题可以巧 阅读全文
posted @ 2018-05-13 12:04 *Miracle* 阅读(224) 评论(0) 推荐(1)
摘要: 两种算法本质是相同的。 都是从某一个点开始进行延伸,不断更新一个dis值,直到所有的点都被遍历到,从而求出一个最短路或者是一个树的边权的最小总和。 朴素算法都是n^2,都可以采用堆优化处理,降低复杂度到mlogn. 但是在一张完全图上跑,此时m=n^2,朴素算法反而快一些。而且常数小。 相比较于SP 阅读全文
posted @ 2018-05-13 12:03 *Miracle* 阅读(1200) 评论(0) 推荐(0)
摘要: 1.倍增LCA 通过记录f[i][j],每个点第2的j次方个父亲的编号,来找LCA 代码中,先要处理出每个点的深度,和father(f[i][0]),然后倍增求出所有的祖先。 work的时候,利用二进制拆分的思想,先把两个节点向上翻到同一个深度,再同时向上翻,直到到了lca的儿子位置,再返回f[x] 阅读全文
posted @ 2018-05-13 12:02 *Miracle* 阅读(655) 评论(1) 推荐(0)
摘要: 意义: 树链剖分 就是对一棵树分成几条链,把树形变为线性,减少处理难度 概念 题目大意: 给定一棵有根树,给定每个点初值。 需要处理的问题: 分析: 树链剖分+线段树 树剖部分: 需要数组: 1.dfs1: 目标: ①找到fa,重儿子(son) ②处理节点深度,子树大小(size)(dep[root 阅读全文
posted @ 2018-05-13 12:00 *Miracle* 阅读(223) 评论(0) 推荐(0)
摘要: 普通平衡树 Treap 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 输入输出格式 输入格式: 第一行为 n ,表示操作的个数,下面 n 行每行有两个数 opt 和 x , opt 表示操作的序号( 1≤opt≤6 ) 输出格式: 对于操作 3,4,5,6 阅读全文
posted @ 2018-05-13 11:59 *Miracle* 阅读(213) 评论(0) 推荐(0)
摘要: 欧拉函数: 在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。此函数以其首名研究者欧拉命名(Euler'so totient function),它又称为Euler's totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8 阅读全文
posted @ 2018-05-13 11:56 *Miracle* 阅读(440) 评论(0) 推荐(0)
摘要: LICS:最长公共上升子序列; 一般令f[i][j]表示a串前i位,b串以j结尾的LICS长度。于是,答案为:max(1~m)(f[n][i]); 朴素做法:O(n^3) 相等时,从1~j-1枚举最大值。 算法时间复杂度改进思路主要从优化第三层(k)复杂度入手。 升级做法: O(n^2logn) 利 阅读全文
posted @ 2018-05-13 11:54 *Miracle* 阅读(360) 评论(0) 推荐(0)
摘要: 基本思想在于将一个数拆分成每一位的数字,将总问题转化为子问题。 例:求[a,b]中各个数字出现次数。 (luogu2602 数字计数) 1.发现在i位数中(不考虑前导零),每一个数字出现的次数都相同。f[i]=f[i-1]*10+10^(i-1); 2.在ABCD中,将其拆为:A000+B00+C0 阅读全文
posted @ 2018-05-13 11:53 *Miracle* 阅读(224) 评论(0) 推荐(0)
摘要: 压位高精:即通过将原来数组中一个位置存一位数,改为一个位置存p位数(8-10)。本质上是一种利用进制转换思想的压缩方式。 压位高精VS普通高精优势: 1.节省空间。(10倍以上) 2.节省时间(循环次数少)(10倍) 3.在对于高精与低精(乘法不超int)运算时,可以利用进制较高的优势,达到简化代码 阅读全文
posted @ 2018-05-13 11:52 *Miracle* 阅读(1015) 评论(0) 推荐(1)
摘要: Link Station 传送站 阅读全文
posted @ 2018-05-13 11:50 *Miracle* 阅读(897) 评论(0) 推荐(1)
摘要: 方法一:scanf()读入char[] 使用方法: char str[1024]; scanf("%[^\n]",&str); getchar(); 方法二:getchar()读入char[] 使用方法: char str[1024]; int i=0; while((str[i]=getchar( 阅读全文
posted @ 2018-05-13 11:48 *Miracle* 阅读(495) 评论(0) 推荐(0)
摘要: 1.floyd和dij(SPFA同理)算法的路径记录方法。 https://blog.csdn.net/silence401/article/details/62049708 2.背包中用到的vector直接复制。 https://blog.csdn.net/benTuTuT/article/det 阅读全文
posted @ 2018-05-13 11:47 *Miracle* 阅读(305) 评论(0) 推荐(0)
摘要: https://blog.csdn.net/xiong452980729/article/details/51394036 阅读全文
posted @ 2018-05-13 11:46 *Miracle* 阅读(793) 评论(0) 推荐(0)
摘要: 题目大意: 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段。记第 i 条被插入的线段的标号为 i 2.给定一个数 k,询问与直线 x = k 相交的线段中,交点最靠上的线段的编号。 若有多条线段符合要求,输出编号最小的线段的编号 (省略输入以及在线操作的要求) 分析: 明显的线段树特 阅读全文
posted @ 2018-05-13 11:45 *Miracle* 阅读(238) 评论(0) 推荐(0)
摘要: 题目大意: 小A在平面上(0,0)点的位置,第i栋楼房可以用一条连接(i,0)和(i,Hi)的线段表示,其中Hi为第i栋楼房的高度。如果这栋楼房上任何一个高度大于0的点与(0,0)的连线没有与之前的线段相交,那么这栋楼房就被认为是可见的。 施工队的建造总共进行了M天。初始时,所有楼房都还没有开始建造 阅读全文
posted @ 2018-05-13 11:43 *Miracle* 阅读(192) 评论(0) 推荐(0)
摘要: 题目大意: 给定一个区间及其各个元素的初值,要求支持如下操作: 1.区间加 2.区间赋值 3.查询区间最大值 4.查询区间历史最大值 分析: 容易想到线段树,但是细思恶极(仔细想想恶心到了极点)的是,最后查询区间历史最大值的操作。 如果只记录区间历史最大值显然不能下放,如果单纯更新区间加,区间赋值最 阅读全文
posted @ 2018-05-13 11:42 *Miracle* 阅读(307) 评论(0) 推荐(0)
摘要: 题目大意: 有n个数,要将他们分成若干段,每一段的cost定义为: cost=r-l+ΣCk (k∈[r,l]) 该段的最终花费是:(cost-L)^2; 给出L,n,C(1~n),总共的最小花费。 分析: dp方程极容易想出来: f[i]=max(f[j]+(sum[i]-sum[j]+i-j-1 阅读全文
posted @ 2018-05-13 11:41 *Miracle* 阅读(276) 评论(0) 推荐(0)
摘要: 题目大意: 你初始时有∞ 元钱,并且每天持有的股票不超过 Maxp 。 有 T 天,你知道每一天的买入价格( AP[i] ),卖出价格( Bp[i] ), 买入数量限制( AS[i] ),卖出数量限制( BS[i] )。 并且两次交易之间必须间隔 W 天。 现在问你 T 天结束后,最大收益是多少。 阅读全文
posted @ 2018-05-13 11:39 *Miracle* 阅读(258) 评论(0) 推荐(0)
摘要: 题目大意: 给出N个正整数,AB两个人轮流取数,A先取。每次可以取任意多个数,直到N个数都被取走。每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大。在这样的情况下,最终A的得分减去B的得分为多少。 分析: 我们身临其境地考虑一下,先手肯定是要从大到小取数,并且 阅读全文
posted @ 2018-05-13 11:38 *Miracle* 阅读(181) 评论(0) 推荐(0)
摘要: 题目大意: 某人写了n封信和n个信封,如果所有的信都装错了信封。求所有信都装错信封共有多少种不同情况。 分析: 方法一:递推 已经处理了f[0]~f[n-1],考虑f[n],新来了一个数n,这个数要放错位,有n-1种情况。其他的数的放置每次都有f[n-1]种情况,被n占用位置的数k,将k放在n位置, 阅读全文
posted @ 2018-05-13 11:37 *Miracle* 阅读(255) 评论(0) 推荐(0)
摘要: 题目大意: 给定n和一串数字,这串数字是一个1~n的排列。现在要用两个栈给这些数字排序。首先先判断是否有解,有解的话再输出字典序最小的方案: 入栈1,输出a,出栈1,输出b 入栈2,输出c,出栈2,输出d 分析: 首先必然要先考虑是否有解。对于没有解的情况,必然是当到了某一个数x0时,栈1,栈2队首 阅读全文
posted @ 2018-05-13 11:36 *Miracle* 阅读(282) 评论(0) 推荐(0)
摘要: 题意: 将n(n<=10^18)的各位数字重新排列(不允许有前导零) 求 可以构造几个mod m等于0的数字 分析: 状态压缩 状态: 设f[s][k]表示对于选择数字组合的s来说,%m等于k的排列数量。 第一维大小:2^18 第二维大小:100 阶段: 对于s的选择的枚举。s直接从1枚举到1<<( 阅读全文
posted @ 2018-05-13 11:34 *Miracle* 阅读(293) 评论(0) 推荐(0)
摘要: 题目大意 给定一个 n 位的十进制数,可以在数字之间加 k 个' + ',得到一个式子,求每种方案的这个式子的和 分析: 容易想到将式子的和转化为每个数字的贡献值之和。 设数组a为:a(n-1),a(n-2),...,a(0); 对于每一个位置,我们可以以其右面第一个放加号的位置为界,确定它的数位和 阅读全文
posted @ 2018-05-13 11:33 *Miracle* 阅读(387) 评论(0) 推荐(0)
摘要: 题目大意: 有n盏灯,(0<=n<=1000),有m盏已经点亮,每次只能点亮与已经点亮的灯相邻的灯,求总方案数,答案对1e9+7取模 第一行:两个整数n,m表示灯的总数和已点亮的灯的数目 第二行m个数,表示已点亮的灯的编号 分析: 我们可以借助已经被点亮的灯作为分界点,找到若干个长度不为0的开区间。 阅读全文
posted @ 2018-05-13 11:30 *Miracle* 阅读(302) 评论(0) 推荐(1)
摘要: 题目大意: 给一个n边形,求出在所有任意三条对角线都不相交于同一个点的情况下,交点个数是多少。(即交点个数最多是多少) 分析: 题目很水,但是公式不好想。 由于任意三条对角线不会交于一点,所以所有的交点都是两条对角线相交而成的。这两条对角线来自四个点(可以当做求四边形的个数问题)。所以每有任意的四个 阅读全文
posted @ 2018-05-13 11:27 *Miracle* 阅读(147) 评论(0) 推荐(0)
摘要: 题目大意: 给出k、n个数选择一种字典序最大的排列,使得对于任意的i,di>=d[i/k](下取整 下同) 分析: 很容易想到的是建树,将i的父亲设为[i/k],之后建有向边。 60分贪心: 将原先的a数组升序排列,直接根据子树大小分配排位。pai[i]=(同层级剩余的)-(子树大小)+1; 然而对 阅读全文
posted @ 2018-05-13 11:26 *Miracle* 阅读(173) 评论(0) 推荐(0)
摘要: 题目描述 菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手。 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束。 落子的规则是:一个格子可以落子当且仅当这个格子内没有棋子且这个格子的左侧及上方的所有格子内都有棋子。 棋盘的每个格子上,都写有两个非负整数 阅读全文
posted @ 2018-05-13 11:25 *Miracle* 阅读(298) 评论(0) 推荐(0)
摘要: 题目大意: 在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定。陪审团是由法官从公众中挑选的。先随机挑选n 个人作为陪审团的候选人,然后再从这n 个人中选m 人组成陪审团。选m 人的办法是:控方和辩方会根据对候选人的喜欢程度,给所有候选人打分,分值从0 到20。为了公平起见,法官选出陪审团的原则是 阅读全文
posted @ 2018-05-13 11:23 *Miracle* 阅读(436) 评论(0) 推荐(0)
摘要: 题意: 给定若干子区间,以及目标区间,用最少的子区间覆盖目标区间。若无法实现,输出-1; 思路: 因为每取一个,花费都是1,所以可以使用贪心。(否则要用DP)子区间按照左端点由小到大排序,记录已被覆盖区间,每次找到左端点在[1~r+1]中的右端点的最大值,用有这个最大值的子区间参与覆盖。ans++; 阅读全文
posted @ 2018-05-13 11:18 *Miracle* 阅读(158) 评论(0) 推荐(0)
摘要: 本文转载:http://www.cnblogs.com/YoungNeal/p/8530398.html 题目大意: 给定一棵树,有 n-1 条树边,m 条非树边,有两次割边的机会,第一次只能割树边,第二次只能割非树边,问有多少种方案使得两次之后树分为两个部分? 题解: 我们称每条非树边 (x,y) 阅读全文
posted @ 2018-05-13 11:13 *Miracle* 阅读(200) 评论(0) 推荐(0)
摘要: 题意: 给出一个无向连通图,q次增加后询问,问每次增加后剩余“桥(割边)”的数量。 思路: 先将所有的边双连通分量找到,缩点变成树,找到dcc个数,桥数即为dcc-1; 对于每个询问,若c[x]==c[y]无影响;反之,在树上找到c[x]、c[y]的LCA,再将路上的桥变为0,sum++,最后桥数减 阅读全文
posted @ 2018-05-13 11:06 *Miracle* 阅读(219) 评论(2) 推荐(0)
摘要: 洛谷P2761 1.考虑到所有的错误只有“修复,未修复”两种情况,所以可以用0,1标记压缩状态,采用位运算减少时空浪费。 又考虑到有修复时间的关系,将时间抽象成边,将状态抽象为点(设修复为0,未修复为1)最后从(1<<n)-1开始寻找到0的最短路,SPFA一边建图一边松弛即可。 2.实现过程中,难点 阅读全文
posted @ 2018-05-13 11:01 *Miracle* 阅读(202) 评论(0) 推荐(0)
摘要: 洛谷P2567 要点: 很容易考虑到容斥。先预处理出所有幸运数字,加上它们的倍数个,再找所有两个的最小公倍数减去倍数个,再加上3的…… 至于[a,b],“前缀和”思想处理即可。 但是暴力的考虑复杂度2^2046,tle; 所以要考虑如下剪枝: 1.如果b|a,那么对于所有的x|b,都有x|a,所以这 阅读全文
posted @ 2018-05-13 10:59 *Miracle* 阅读(434) 评论(0) 推荐(0)
摘要: 本篇博文记录一些机智操作,简洁方法,奇技淫巧。 阅读全文
posted @ 2018-05-13 10:48 *Miracle* 阅读(2192) 评论(0) 推荐(4)
摘要: OI考试越来越多,答题技巧越来越关键。出错不可怕,要命的是一错再错。本篇记录本人考试心得。仅供借鉴,反省。 阅读全文
posted @ 2018-05-13 10:43 *Miracle* 阅读(111) 评论(0) 推荐(0)
摘要: 本文章记录所错、易错细节要点。 阅读全文
posted @ 2018-05-13 10:07 *Miracle* 阅读(1066) 评论(0) 推荐(0)