随笔分类 -  数据结构

摘要:在某咕上打了一晚上的模板 感觉还好。。。 #include<bits/stdc++.h> #define LL long long using namespace std; inline int read() { int x = 0,f = 1;char ch = getchar(); for(;! 阅读全文
posted @ 2018-11-05 20:36 探险家Mr.H 阅读(212) 评论(1) 推荐(0)
摘要:T1 抓牛 你在 $n$ ,牛在 $k$,你一步可以走到 $n-1,n+1,2 \times n$,问最少几步能抓到牛 sol:dp $f_i$ 表示走到 $i$ 最少走了几步 当 $i \leq n - 1$ 时,显然 $f_i = f_{i+1} + 1$(因为只能一步一步走过去) $i$ 在 阅读全文
posted @ 2018-11-02 18:46 探险家Mr.H 阅读(217) 评论(0) 推荐(0)
摘要:给你一个序列,一开始都是 $1$,资瓷 $3$ 种操作 1.把 $[l,r]$ 赋值为 $0$ 2.把 $[l,r]$ 中所有 $1$ 删掉,记录删掉的 $1$ 的个数,并把这些 $1$ 从左到右填到 $[a,b]$ 中的 $0$ 处,不考虑 $1$ 的剩余(剩下的相当于全扔了) 3.查询 $[l, 阅读全文
posted @ 2018-11-01 09:00 探险家Mr.H 阅读(220) 评论(0) 推荐(0)
摘要:给你一个数列,在相邻两个数之间插入加号,减号或乘号 每次支持单点修改,求所有这样可以得到的表达式之和,膜1e9 + 7 sol: 我是个 sb 。。。 可以发现,如果某位置出现了加号,后面一定有一个减号把它消掉,于是答案就是一些出现了好几次的前缀积之和 算一下每段前缀积的贡献即可 #include< 阅读全文
posted @ 2018-11-01 08:19 探险家Mr.H 阅读(356) 评论(0) 推荐(0)
摘要:给一个字符串,每次在末尾加入一个字符,询问当前字符串有多少本质不同的子串 裸SAM,因为同一个节点内字符串都是本质不同的,所以每次增加的答案是$mxlen[np] - mxlen[fa[np]]$ #include<bits/stdc++.h> using namespace std; const 阅读全文
posted @ 2018-10-30 13:10 探险家Mr.H 阅读(207) 评论(0) 推荐(0)
摘要:T1 elim 给你一个消消乐游戏的界面,$3$ 个及以上的同色连块会消除,求一次消除之后是什么样的 sol:模拟 T2 battleground 给你一个 $n \times n$ 的棋盘,上面有 $m$ 个玩家,玩家可以向 $8$ 个方向走,有的地方有障碍不能走,不能斜着从两个障碍里面挤过去(大 阅读全文
posted @ 2018-10-27 14:04 探险家Mr.H 阅读(141) 评论(0) 推荐(0)
摘要:给一个图,每个点有点权,$q$ 次询问从 $x$ 开始只走点权小于等于 $y$ 的路径能到的点中第 $k$ 大的点权,无解输出 -1 强制在线 请注意因为这个 sb 博主为了描述方便,这里的题目描述用的字母跟原题有出入,题解跟跟这里的题目描述一样,不一定跟 bzoj 上一样( $n \leq 10^ 阅读全文
posted @ 2018-10-25 20:49 探险家Mr.H 阅读(153) 评论(0) 推荐(0)
摘要:数据范围252501 劲啊 Q国的监察院是一个神秘的组织。 这个组织掌握了整个Q国的地下力量,监察着Q国的每一个人。 监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只听从其上直接司的命令。其中1号成员是监察院的院长,这个庞然大物的主人。 由于时代的进步,监察院议会决定升级组织的旧式通信 阅读全文
posted @ 2018-10-23 19:45 探险家Mr.H 阅读(232) 评论(0) 推荐(0)
摘要:T1 给一个01矩阵,求一个最大子矩阵,矩阵内的和不超过k $k \leq n^2$ $n \leq 500$ sol:$O(n^4)$枚举左上角和右下角,发现后两维有单调性,可以用一个滑窗来搞 但其实非常优秀的枚举3个坐标然后二分第四个坐标的$O(n^3logn)$做法是能过的...本地1.3s 阅读全文
posted @ 2018-10-22 19:53 探险家Mr.H 阅读(170) 评论(0) 推荐(0)
摘要:T1 飞行时间 对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相同,求飞机的飞行时间。 sol: 很明显答案是(过去落地 - 过去起飞 + 回来落地 - 回来起飞) / 2 时间转换要仔细算一下不要跟某省队dalao一样写挂就可以了 T2 二阶和 区间修改,求区间区间和的和 s 阅读全文
posted @ 2018-10-20 17:51 探险家Mr.H 阅读(234) 评论(0) 推荐(0)
摘要:这是一道模板题。 给定一棵 nnn 个节点的树,初始时该树的根为 111 号节点,每个节点有一个给定的权值。下面依次进行 mmm 个操作,操作分为如下五种类型: 换根:将一个指定的节点设置为树的新根。 修改路径权值:给定两个节点,将这两个节点间路径上的所有节点权值(含这两个节点)增加一个给定的值。 阅读全文
posted @ 2018-10-19 18:17 探险家Mr.H 阅读(703) 评论(0) 推荐(0)
摘要:看到这个标题立刻想到:、 “绝地科学家,八倍不屏息啊,八百里外把头打啊...” 首先我们发现如果只考虑第二个操作,这棵树就是假的,我们可以直接莫队解决 如果考虑换根的话...可以把一个操作换成小于等于9个操作就可以了 当然怎么换,有一些非常恶心的分类讨论 嘤嘤嘤 YNOI 题是好题 但是要卡常 首先 阅读全文
posted @ 2018-10-17 19:34 探险家Mr.H 阅读(703) 评论(10) 推荐(1)
摘要:我 是 个 傻 逼 T1 给你一个长度不超过10的数字串,问你可不可以加若干加号和一个等号使它变成一个等式 sol: 搜 T2 给一个01串,每个地方有一个代价$c_i$,交换两个字符的代价是$c_i + c_j$ 求最后逆序对数 - 交换代价的最大值 $n \leq 1000$ sol: 首先想到 阅读全文
posted @ 2018-10-15 18:59 探险家Mr.H 阅读(202) 评论(0) 推荐(0)
摘要:有一个圆方树,每次给出一个点集,询问虚树上圆点数量-询问点数量 sol:题意读懂就很简单了...可以建虚树dp 也可以考虑每一条链对答案的贡献,最后要注意单独计算虚树根对答案的贡献 #pragma GCC optimize("-funsafe-loop-optimizations") #pragma 阅读全文
posted @ 2018-10-10 19:05 探险家Mr.H 阅读(171) 评论(0) 推荐(0)
摘要:维护一个方阵,支持 1.删掉一个点,剩下的点先向左看齐再向前看齐 2.询问一个位置上是哪个点 $n,m,q \leq 3 \times 10^5$ sol: 我们每行前$m-1$列维护一个线段树,最后一列维护一棵线段树 然后搞n + 1个vector 这个线段树只需要维护“这个节点下面有多少点已经被 阅读全文
posted @ 2018-10-08 16:03 探险家Mr.H 阅读(301) 评论(0) 推荐(0)
摘要:有一棵带边权有根树,有m个运输计划,你可以把一条边变成0,所有计划一起开始 求完成所有计划的最短时间 sol: 先二分,我们发现,用时mid以下的计划是没用的(要所有计划都完成) mid以上的计划,如果不相交,直接就是false 如果相交,找到他们最大的一条交边,把那条边变成0,然后看最大计划 - 阅读全文
posted @ 2018-10-08 15:47 探险家Mr.H 阅读(189) 评论(0) 推荐(0)
摘要:有$n$个数,一开始是$1~n$,有$m$次操作 1.把编号为$x$的人编号改为$y$,保证$y$没出现过 2.把编号为$x$的人提到第一名 3.把编号为$x$的人怼到最后一名 4.查询排名为$x$的人的编号 初始每个人的排名 = 他的编号 sol: 考虑线段树,在叶子维护一个值$v$表示这个点上的 阅读全文
posted @ 2018-10-06 16:05 探险家Mr.H 阅读(149) 评论(0) 推荐(0)
摘要:很简单 用一个线段树维护 1.答案 2.当前栈顶是什么时候push进来的 然后用一棵以时间为版本的可持久化线段树维护每个操作之后第一个覆盖到他的操作是哪个 就可以了 询问直接在线段树上询问,修改在两棵树上分别修改即可 调一年 //wls niubi! #include<bits/stdc++.h> 阅读全文
posted @ 2018-09-19 18:38 探险家Mr.H 阅读(160) 评论(0) 推荐(0)
摘要:卧槽调了一晚上 想法很简单 用$set$维护不同颜色的树链的并,支持链加和单点查询 具体我们可以差分 于是就是单点加,子树和 考虑深度 我们写一个主席树,第$i$个版本只考虑前$i$层 查询$d + dep[x]$深度的树中$x$子树和即可 调调调 想5min写一晚上 #include<bits/s 阅读全文
posted @ 2018-09-11 20:16 探险家Mr.H 阅读(519) 评论(4) 推荐(0)