03 2021 档案
摘要:题链 最长的蚯蚓被砍两截之后,其余的蚯蚓长度会增加,与其加其余蚯蚓不如对这两只蚯蚓操作,可定义一个buff表示其余蚯蚓需要增加多少长度,当拿出最长的那只蚯蚓时,就需要加上buff,当然被剪断的变成两条就需要减去当前buff再压入队列,保证下次拿出来时加上buff是应有的长度; 一个队列存原数组,另外
阅读全文
摘要:题链 利用并查集,只有当该边的权值大于等于k值时才合并; 将输入扒下来按相关度从大到小排序,一个个更新即可 //#pragma GCC optimize("O2") #include <bits/stdc++.h> using namespace std; //#include<ext/rope>
阅读全文
摘要:题链 OI-wiki 有图好评 //#pragma GCC optimize("O2") #include <bits/stdc++.h> using namespace std; #include<ext/rope> using namespace __gnu_cxx; #include <ext
阅读全文
摘要:题链 用的是 STL rope //#pragma GCC optimize("O2") #include <bits/stdc++.h> using namespace std; #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/
阅读全文
摘要:题链 Treap平衡树 zw:别把线段树宏定义的ls rs用在平衡树上... 没发现难找 #include <bits/stdc++.h> //#include <ext/pb_ds/priority_queue.hpp> //#pragma GCC optimize("O2") using nam
阅读全文
摘要:在没有重复权值的基础上建立的二叉搜索树; 这是不平衡的; #include <bits/stdc++.h> //#include <ext/pb_ds/priority_queue.hpp> //#pragma GCC optimize("O2") using namespace std; //us
阅读全文
摘要:OI-wiki 题链 向下推的时候是类似向下推懒惰标记的方式,没理解导致吃了一整页的WA #include <bits/stdc++.h> //#include <ext/pb_ds/priority_queue.hpp> //#pragma GCC optimize("O2") using nam
阅读全文
摘要:题链 解:带修改的查询包含第一个值的[1,n]的最长上升子序列; 线段树维护节点区间最大值以及区间包含最左值的最长上升子序列,则询问的答案就是根节点的信息 区间最大值p[rt].maxn很好维护,主要是维护 区间包含最左值的最长上升子序列 这里记为p[rt].upcnt; 显然对于每一个叶子节点([
阅读全文
摘要:OI-wiki 有个手绘图 三道模板题(同求第k小) //#include <bits/stdc++.h> //#include <ext/pb_ds/priority_queue.hpp> #include <stdio.h> #include <stdlib.h> #include <strin
阅读全文
摘要:题链 询问区间种类不能直接通过类似 get_sum(r)-get_sum(l-1) 的方式去得出答案 如何使得上述方式可以求解成为关键,可以将m个询问按照右区间r从小到大排列,不试图将所有数据(题给的一串贝壳数组)一起建立树状数组,通过一个个将数组中的元素加入树状数组时,对于该种类上一次出现的位置l
阅读全文
摘要:题链 二分答案,将原数组中小于二分值的置0,大于等于的置1,则区间排序问题则可变为区间赋值问题 线段树维护区间和,记cnt为[l,r]区间的1的个数,区间升序排序[l,r]可以转为对[r-cnt+1,r]区间值变为1,[l,r-cnt]区间值变为0,区间降序同理 若所求pos的值为1,说明经过一轮排
阅读全文
摘要:题链 暴力想法就是求前缀数组,然后倒着一步步得跳j指针直到长度小于当前总长一半,最后把j指针跳到0的次数总和就是答案,当然会T,例如全是'a' 在求前缀数组时可以递推记录当前长度有多少个相同前后缀的个数,此时不管前后缀区间是否重叠 用与求前缀数组同样的想法去跳指针j,每次都得出不超过长度一半的最长前
阅读全文
摘要:题链 扫描线模板题 将每个星星扩展为一个矩形,长w-1,宽h-1,扩展的长度不同维护的东西也不同。 这样扩展结果是维护一个个点,如图 而后维护区间max,操作只有区间加减。 #include <bits/stdc++.h> #include <ext/pb_ds/priority_queue.hpp
阅读全文
摘要:题链 求出模式串的前缀数组后,一个个读入文本串字符,遇到与模式串相同的字串(前缀值与模式串长度len相等),弹出栈顶len个前缀函数值,相当于消去这len个长度的字符的影响,以栈的形式存储答案与文本串的前缀数组 #include <bits/stdc++.h> #include <iostream>
阅读全文
摘要:#前言 学自OI-wiki 前缀函数与kmp ##第二个优化 从第二个优化开始我看的时间比较久,如图部分 其中公式 看了挺久,主要是第二个部分到第三个部分,关于这个转换,在例图展示中如 因为 s[0...3] == s[(i-3)...i] && s[0...1] == s[(i-1)...i],所
阅读全文
摘要:#前言 均使用unsigned long long溢出自动取模; 非unsigned long long版本:OI-wiki 字符串hash #详解 #模板 ##预处理进制B的次方 void init_bp(){ bp[0][0] = bp[1][0] = 1; for(int i=1;i<=hs;
阅读全文
摘要:题链 题意求区间最长连续子序列最大和 当数据存在负数时,不能单纯取三个地方的max,如: p[rt].maxn = max(p[ls].rmax+p[rs].lmax,max(p[rt].lmax,p[rt].rmax)); #include <bits/stdc++.h> #include <io
阅读全文
摘要:题链 该题洛谷题解区讲的都很好; 当询问时, l == r时,答案有可能不是true... (奇怪的坑) #include <bits/stdc++.h> #include <iostream> #include <algorithm> #include <stdio.h> #include <st
阅读全文
摘要:题链 对于mark的引入: 如果不引入直接加,会出现某段区间被重复加的现象,要保证若某段区间被覆盖,则只需要加一次。 #include <bits/stdc++.h> #include <iostream> #include <algorithm> #include <stdio.h> #inclu
阅读全文
摘要:题链 边带权并查集,val[i]记录编号为i的舰船距离根舰船的距离,合并时如x接到y所在舰队的末尾,fx,fy为x,y的根节点,并不是val[fx] += val[y],这里的若不是真正舰队末尾则出错,需要sum[i]数组记录某一列舰队的数目,val[fx] += sum[fy]; 具体如代码着重部
阅读全文
摘要:题链 若要将一个排列转换成另一个排列,一次只能交换相邻两个元素,例如将 a = {4, 3, 1, 2} 变成 b = {1, 3, 2, 4},最少需要交换 a或b 几步; 新建 pa[a[i]] = i 记录排名a[i]的位置,pb[b[i]] = i 记录排名b[i]的位置,令p[pa[i]]
阅读全文
摘要:OI-Wiki #include <bits/stdc++.h> #include <iostream> #include <algorithm> #include <stdio.h> #include <string.h> #include <stdlib.h> //#pragma GCC opt
阅读全文
摘要:重定义的时候就如写sort时的cmp一样,最后将return时候的">","<"反过来就行 #include <bits/stdc++.h> #include <iostream> #include <algorithm> #include <stdio.h> #include <string.h>
阅读全文
摘要:题链 贪心把使用优惠劵后价格前K个一一压入队列(以队列 QQ 表示)直到钱不够(可以证明前K个是一定要买的,因为最赚),其他未被压入队列的价格压入队列 Q 例如价格前K个中某个产品以原价购买+后K个某个产品以优惠价购买也是可行的情况 2 1 5 2 1 1000 3 则 QQ队列中以原价和优惠价的差
阅读全文
摘要:#include<bits/stdc++.h> using namespace std; #define LL long long const int MAXN = 5009; int N; struct Point { double x, y; }p[MAXN], C; // p[i] 表示点集
阅读全文
摘要:习自 #include <bits/stdc++.h> #include <iostream> #include <algorithm> #include <stdio.h> #include <string.h> #include <stdlib.h> using namespace std; #
阅读全文
摘要:题链 线段树记录第i个礼物与之相同的后一个礼物的位置; LL p[MS]; // 记录第i个礼物 后一个礼物位置 LL q[MS]; // 记录第i个礼物 前一个礼物位置 关于修改: 1.删除第pos个礼物:在线段树中将其置为INF(表示该礼物不存在),删除后该礼物左右所指向的礼物位置则需要更改;
阅读全文
摘要:题链 此题与洛谷P6242 【模板】线段树 3为孪生题 #include <bits/stdc++.h> #include <iostream> #include <algorithm> #include <stdio.h> #include <string.h> #include <stdlib.
阅读全文

浙公网安备 33010602011771号