首页 > 老瞎眼 pk 小鲜肉
头像 Isaunoya
发表于 2019-10-15 15:51:15
myblog Problem 这题的题意大概是 给出一段长度为 的区间 次询问求 ~ 这个区间内 最短的一段区间 ~ 使得 诶 离线么?树状数组好像不好做啊 因为大多数人只会单点修改区间修改和差分吧 考虑离线+线段树 我们先记录一个 那么我们用一个类似桶一样的东西 记录上一个出现 的位置 展开全文
头像 lifehappy
发表于 2020-12-16 19:59:43
老瞎眼 pk 小鲜肉 利用异或前缀和,离线处理。 我们定义为值为的异或前缀和最后一次出现在上。 我们通过枚举有区间,然后把异或相同的区间长度存在上, 之后我们只要在区间查询区间最小值即为答案了。 #include <bits/stdc++.h> #define mid (l + r &g 展开全文
头像 Kur1su
发表于 2020-12-16 23:35:52
Desription 链接:https://ac.nowcoder.com/acm/problem/50444来源:牛客网 老瞎眼有一个长度为 n 的数组 a,为了为难小鲜肉,他准备了 Q 次询问,每次给出 一个区间[L,R],他让小鲜肉寻 找一对 l,r 使L<=l<=r<=R 展开全文
头像 nagisa_菜鸡
发表于 2020-12-23 19:50:36
看到题目,我想大家第一个想到的就是前缀异或和,因为这种询问一整段的异或和的一半都需要这样处理,不然复杂度太高。之后,题目要询问的就是找到在区间[L,R]中的存在的点sum[l]==sum[r],使得r-l+1最小。若是考虑直接让值对应整个[l,r]区间则会很麻烦,所以,考虑转化为单点维护。考虑单点维 展开全文
头像 ExcaIibur
发表于 2020-12-17 16:15:49
求q次询问下最短异或和为0子区间长度。 根据异或性质容易将条件转化为前缀和 sum[l-1]=sum[r] 的形式,用数组a记录一下前缀异或和最近出现的位置,则问题可以转化为维护单点贡献的形式。 考虑从1移动右端点,则随着右端的更新,将以此端点结尾的对应区间长度值赋给下标为左端点的求值数组,这样就可 展开全文
头像 Trkly
发表于 2020-12-21 12:28:50
参考代码: #include<bits/stdc++.h> #define read() Read<int>() namespace pb_ds{ namespace io{ const int MaxBuff=1<<15; 展开全文
头像 BNDSBilly
发表于 2020-12-16 21:21:25
根据题意,我们可以使用 复杂度求出以 为右边界的左边界在哪,然后把所有的询问离线,按照右端点从小到大排序,维护一个棵线段树,结点代表以 为右边界的最小区间长度,对于每个询问,只要把所有的右端点前的值更新到线段树中,再查询一次最小值即可知道答案。 #pragma comment(linker, 展开全文

等你来战

查看全部