数据结构
abutoto
这个作者很懒,什么都没留下…
展开
-
可持久化Trie树
typedef long long ll;struct node{ int next[N][26],L,root[N],time; ll c[N]; int newnode(int x){ L++; for(int i=0;i<26;i++) next[L][i]=next[x][i]; c[L]=c[x]; ...原创 2018-05-15 13:57:04 · 912 阅读 · 0 评论 -
2018 Multi-University Training Contest hdu 6315 Naive Operations(线段树)
题意有两个数列a和b,a的初始值为0,b数组是1~n的一个排列,有两个操作: 1. 将a数组区间[l,r]的每个数+1。 2. 输出Σa[i]/b[i](l<=i<=r)Σa[i]/b[i](l<=i<=r)。题解由于操作数一共10^5,所以对于每一个位置i的贡献,我们顶多更新n/b[i]次,所以总的更新次数是n*log(n),我们通过线段树进行区间所缺数最...原创 2018-07-25 19:25:17 · 141 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第四场)J. Hash Function [线段树+拓扑排序]
题意给你一个对a数组hash之后的hash表,求原来的a数组字典序最小的解。题解对于hash表中当前这个数hi,若hi%n!=i的话,说明当前这个数是后移过的,那么说明在hi后移的这一段数必须在hi之前放入才能让hi在i这个位置,所以这就是一个拓扑排序。假如我们暴力建图,那么肯定会TLE。所以我们用线段树优化建图,对于当前这个点,他位移的那段区间,找到在线段树上的映射,将这些子区间的点...转载 2018-07-28 18:58:00 · 255 阅读 · 0 评论 -
2018 Multi-University Training Contest 3 hdu 6319 Problem A. Ascending Rating(单调栈)
题意给定一个序列 a[1..n],对于每个长度为 m 的连续子区间,求出区间 a 的最大值以及从左往右扫描该区间时 a 的最大值的变化次数。 题解滑动窗口,从左到右,维护一个单调栈,从小到大 代码#include<stdio.h>#include<deque>#include<stack>#include<iostrea...原创 2018-07-31 14:26:09 · 150 阅读 · 0 评论 -
2018 Multi-University Training Contest 5 HDU 6356 Glad You Came(线段树)
题意给你n个数(随机计算得到),有m次修改,每次修改区间L,R,将这个区间内所有小于v(随机val)的值修改为v,求最后i*a[i]的异或和。题解通过线段树记录区间最小值,假如当前区间最小值大于等于v的话就递归修改了,否则对当前区间打更新标记。复杂度是O(nlogn),由于查询数很大,但是是随机数,所以可以确定总的复杂度不会到达O(nlogn)。代码#include<b...原创 2018-08-07 10:03:37 · 180 阅读 · 0 评论 -
2018 ICPC青岛网络赛 B. Red Black Tree (lca)
题意给你一棵树,有m个结点是红色的,其中根1肯定是红色的,其他结点的权重是到祖先的红色结点的距离,q个询问,每次问k个结点,在修改树上一个点为红色的情况下,这k个点的最大的权重的最小值,每次询问相互独立 题解首先一个dfs求出每个点的权重,以及lca所需的东西,对于每个询问,按照权重排序,把权重从大到小的合并起来,将他们的共同的lca染成红色,也就是把这些大的用新的红点去更新权重,...原创 2018-09-23 22:05:59 · 539 阅读 · 0 评论