其他
文章平均质量分 60
ssl_fuyang
ヾ(◍°∇°◍)ノ゙
展开
-
线段树合并【模板】
线段树合并原创 2023-02-06 07:27:55 · 279 阅读 · 0 评论 -
笛卡尔树【模板】
笛卡尔树原创 2022-08-18 07:41:18 · 137 阅读 · 0 评论 -
可持久化并查集【主席树】【启发式合并】
>Linkluogu P3402>Description>解题思路直接暴力空间会爆。我们发现一次合并只会修改一个节点的信息。可持久化结构我们会想到主席树,用线段树换数组获取总体更少的空间,那我们就用主席树来储存某个时刻某个节点的父亲然后询问就直接查询两个点的祖先是否一样即可合并不压缩路径(据说会mle和tle),为了不tle,就用到启发式合并,集合深度小的并到大的(因为查询祖先的时候与集合深度有关)>代码#include <iostream>#原创 2022-02-24 21:51:26 · 183 阅读 · 0 评论 -
CF896C Willem, Chtholly and Seniorious【珂朵莉树】
>Linkluogu CF896C>Description>解题思路珂朵莉树,一种奇妙的数据结构使得暴力跑的飞快这种数据结构的重要就是“推平”,题目中的第二种操作。珂朵莉树把每段连续的且数值相同的区间存为一体,放入set(按照位置从小到大排序)。如果操作一个区间 [l,r][l,r][l,r],就把 l,rl,rl,r 各自存在的区间分裂splitsplitsplit成两个区间,再进行操作。其他就是直接暴力>代码#include <iostream&g原创 2022-02-24 19:28:51 · 393 阅读 · 0 评论 -
[CSP-S 2021] 廊桥分配【set】【二分】
>Linkluogu P7913>Descriptionn≤105n\le 10^5n≤105>解题思路跟考场上的想法一样,不过那时候没学set,不知道怎么实现边删数边二分,然后就打了一个好麻烦的堆然后挂了TT set大法好(虽然说也有set以外的方法根据题意,想到一种方法,先处理出 fif_ifi 和 ffiff_iffi,分别表示国内/国际分到 iii 个廊桥,停靠在廊桥的飞机数量答案就为 max1≤i≤nfi+ffn−1max_{1\le i\le n}f_i原创 2021-11-18 20:34:37 · 951 阅读 · 0 评论 -
Cthugha【前缀和】
>Linkluogu T210845>Description给出一个只包含 R 和 B 的字符串,求这个字符串中 R 的数量和 B 的数量相等的最长子串长度∣S∣≤2∗106|S|\le 2*10^6∣S∣≤2∗106>解题思路维护一个前缀和,表示前缀子串中 R 比 B 多多少个符合条件的子串要求我们 R 比 B 多0个,所以我们记录一下每个前缀和数值下,最小的下标 lll 和最大的下标 rrr,用最大的减去最小的,显然 [l+1,r][l+1,r][l+1,r] 子串是原创 2021-11-17 11:31:04 · 427 阅读 · 0 评论 -
[CF888G]Xor-MST【Trie】【分治】【启发式合并】
>Linkluogu CF888Gluogu T207971>Description有一张 nnn 个点的无向完全图。其中点 iii 的点权为 aia_iai。两个点 u,vu,vu,v 之间的边的边权为 aua_uau。求出这张图的最小生成树。>解题思路看到求类似异或的最小值,就会想到用Trie求最小生成树,要找当前最小的两两异或值发现在Trie树上,如果两两叶子节点的LCA深度越深,这两个点的异或值就越小,那这两个点就越优先连起来所以我们在一个节点,找以这原创 2021-11-10 07:19:57 · 74 阅读 · 0 评论 -
树上跑步【欧拉序】【结论】
>Linkybtoj树上跑步>Description小 A 每天会在某一个以 1 为根、N 个结点的有根树上跑步,初始时,每个结点都有一个障碍物,每个障碍物会按照深度优先的顺序周期性地在以初始点为根的子树中移动,每个单位时间只会移动一条边。小 A 初始在 x 点,他要沿着最短路径跑到根结点,且每个单位时间只会移动一条边。在这个过程中,如果小 A 在一个结点遇到了障碍物,他需要消耗 点能量清除它,被清除的障碍物不会再出现。请你求出小 A 需要消耗多少能量才能到终点。n≤5∗105n原创 2021-11-09 08:06:40 · 110 阅读 · 0 评论 -
粉刷木板【DP】【单调队列】
>Linkybtoj粉刷木板>Description有 N 块木板从左到右排成一行,有 M 个工匠对这些木板进行粉刷,每块木板至多被粉刷一次。第 i 个木匠要么不粉刷,要么粉刷包含木板 sis_isi 且长度不超过 lil_ili 的连续的一段木板,每粉刷一块可以得到 pip_ipi 的报酬。不同工匠的 pip_ipi 不同。 请问如何安排能使工匠们获得的总报酬最多。N≤16000,M≤100N\le 16000,M\le 100N≤16000,M≤100>解题思路原创 2021-10-27 20:04:03 · 162 阅读 · 0 评论 -
开车旅行【DP】【倍增】【双向链表】
>Linkluogu P1081ybtoj开车旅行>Description>解题思路先预处理nnn个点,从每一个点出发,最近的下个点和第二近的下个点因为距离为两点的海拔高度差,那我们就可以先按照海拔高度排个序,那最近的点就在它的前驱和后驱之中,第二近的点就在前驱、后驱、前驱的前驱、后驱的后驱之中那我们从111到nnn处理完一个点后,要把当前点删去,因为题目规定了后面的点不能到达前面的点这个可以用双向链表维护,也可以用平衡树(要注意是否越界QwQ)对于第二个问题,由原创 2021-10-25 20:02:14 · 97 阅读 · 0 评论 -
扫描线【模板】【线段树】【离散化】
>Linkluogu P5490>Description求 nnn(n≤105n≤10^5n≤105) 个矩形的面积并。>解题思路离散化就是烦,打错了一个地方找了好久QAQ我们把每个矩形记录成两条垂直于x轴的边(左右边界),左边的边权值为1,右边的边权值为-1;边的坐标(x,y1),(x,y2)然后把边从左到右排个序然后再从左到右扫描过去,遇到边就在它所在的区域[y1,y2][y1,y2][y1,y2]加上它的权值把坐标离散化一下,标记离散化后的坐标x原来的坐标为ra原创 2021-10-20 08:49:41 · 72 阅读 · 0 评论 -
大鱼吃小鱼【贪心】【双指针】
>Linkluogu U138099>Description小Q的家里养殖着一种肉食性的鱼,缺少食物的时候它们还会自相残杀,不过只有一条鱼的体重至少是另一条的两倍 时,体重更重的鱼才能吃掉另一条。小Q想做一个实验,他把鱼两两一组装到入没有食物的鱼缸(如果鱼的数量是奇数则最后一个鱼缸内只有一条鱼), 请问要怎么分组最后鱼的总数最少,求出此时鱼的数量。对于100%的数据,1≤N≤5e5,1≤si≤1e5>解题思路麻了,比赛的时候打了两个贪心发现都是错的,然后我把两个贪心放在一原创 2021-09-26 21:40:49 · 484 阅读 · 0 评论 -
滑动窗口【单调队列】
>Linkluogu P1886>解题思路单调队列的模板题队头维护区间的最 大 / 小 值>代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define N 1000010#define LL long longusing namespace std;int n, k, head, tail;LL a[N原创 2021-08-25 16:24:07 · 79 阅读 · 0 评论 -
[HNOI2012]永无乡【平衡树】【并查集】【启发式合并】
>Linkluogu P3224>Description给出nnn个点,进行qqq次操作:操作1:把两个点连起来操作2:询问与xxx相连通的点中valvalval第yyy大的是哪个点1≤m≤n≤105,1≤q≤3×1051 \leq m \leq n \leq 10^5 ,1≤q≤3×10^51≤m≤n≤105,1≤q≤3×105>解题思路感觉这道紫题还蛮友好的QAQ相连通肯定用并查集,动态插入点+询问第kkk大就是用平衡树了并查集如何把两棵平衡树并在一起?就原创 2021-08-23 21:21:43 · 70 阅读 · 0 评论 -
Telephone G【分层图】【SPFA】
>Linkluogu P7297>Description111~NNN头奶牛站成一排,每个奶牛都有颜色aia_iai (1≤ai≤K≤501≤a_i≤K≤501≤ai≤K≤50),给出K∗KK*KK∗K矩阵表示从颜色iii的牛可以走到颜色jjj,代价为两头牛之间的距离,问从111走到NNN最小代价>解题思路在颜色上面建边然后跑SPFA会有一个点TLE所以要考虑优化因为代价为两个点之间的距离,如果所有牛都是同一个颜色,那我们把一个点连向左右边,代价为1就行了我们把原来原创 2021-08-18 08:17:24 · 90 阅读 · 0 评论