题意:
老瞎眼有一个长度为 n 的数组 a,为了为难小鲜肉,他准备了 Q 次询问,每次给出 一个区间[L,R],他让小鲜肉寻 找一对 l,r 使L<=l<=r<=R 且 a[l]a[l+1]a[l+2]…^a[r]=0,老瞎眼只让他回答r-l+1 最小是多少,若没有符合条件的 l,r 输出”-1”。
思路:
预处理出对于每个位置i找到左边离i最近的位置j使得a[j]^ a[j+1]^ a[j+2]^……a[i]=0记为pre[i],将询问按r从小到大排序,然后从1-n处理每个位置,对于位置i,在线段树上将pre[i]的值更新为i-pre[i]+1,然后查询【Q[i].l,Q[i].r】的最小值

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 5e5 + 10;
int n, q, pre[N], pos[N << 2], sum, ans[N], tree[N << 2];
struct node {int l, r, id;bool operator <(const node &a)const {if(r == a.r)return l < a.l;return r < a.r;}
} e[N];
void update(int pos, int val, int l, int r, int rt) {if(l == r) {tree[rt] = min(tree[rt], val);return;}int mid = (l + r) >> 1;if(pos <= mid)update(pos, val, l, mid, rt << 1);elseupdate(pos, val, mid + 1, r, rt << 1 | 1);tree[rt] = min(tree[rt << 1], tree[rt << 1 | 1]);
}
int query(int L, int R, int l, int r, int rt) {if(L <= l && R >= r) {return tree[rt];}int ans = 0x3f3f3f3f, mid = (l + r) >> 1;if(L <= mid)ans = min(ans, query(L, R, l, mid, rt << 1));if(R > mid)ans = min(ans, query(L, R, mid + 1, r, rt << 1 | 1));return ans;
}
int main() {scanf("%d%d", &n, &q);memset(pos, -1, sizeof pos);memset(tree, 0x3f, sizeof tree);pos[0] = 0;for(int x, i = 1; i <= n; i++) {scanf("%d", &x);sum ^= x;if(pos[sum] != -1)pre[i] = pos[sum] + 1;elsepre[i] = -1;pos[sum] = i;}for(int i = 1; i <= q; i++)scanf("%d%d", &e[i].l, &e[i].r), e[i].id = i;sort(e + 1, e + q + 1);int cnt = 1;for(int i = 1; i <= n; i++) {if(pre[i] != -1)update(pre[i], i - pre[i] + 1, 1, n, 1);while(e[cnt].r == i) {ans[e[cnt].id] = query(e[cnt].l, e[cnt].r, 1, n, 1);cnt++;}}for(int i = 1; i <= q; i++) {if(ans[i] > n)puts("-1");elseprintf("%d\n", ans[i]);}return 0;
}

牛客练习赛53E 老瞎眼 pk 小鲜肉(线段树)相关推荐

  1. 牛客练习赛73 D 离别(线段树+右端点排序离线查询)

    牛客练习赛73 D 离别 思路: 对于每一个固定的右端点i,我们都找到一个区间(l,r)使得区间中的点为左端点时 里面最大的的种数为k. 这个可以用队列或者vector来维护. 然后我们对于q个查询, ...

  2. 牛客练习赛26 E-树上路径 (树链剖分+线段树)

    链接:https://ac.nowcoder.com/acm/contest/180/E 来源:牛客网 树上路径 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语 ...

  3. 牛客多校6 - Josephus Transform(线段树求k-约瑟夫环+置换群的幂)

    题目链接:点击查看 题目大意:给出一个长度为 n 的排列,初始时为 1 , 2 , 3 ... n - 1 , n,现在有 m 次操作,每次操作表示为 ( k , x ) ,即进行 x 次 k-约瑟夫 ...

  4. 【牛客 - 370A】签到题(线段树扫描线 或 STLset)(求线段并)

    题干: 链接:https://ac.nowcoder.com/acm/contest/370/A 来源:牛客网 恭喜你找到了本场比赛的签到题! 为了让大家都有抽奖的机会,只需要复制粘贴以下代码(并且稍 ...

  5. 2019 牛客多校 C Governing sand 线段树

    链接:https://ac.nowcoder.com/acm/contest/887/C 来源:牛客网 Governing sand 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 6 ...

  6. 2021牛客多校4 - Tree Xor(线段树+异或区间拆分)

    题目链接:点击查看 题目大意:给出一棵 nnn 个点组成的树,每个点权的取值范围是 [li,ri][l_i,r_i][li​,ri​],每条边权代表的是两点的异或值,现在问这棵树有多少种有效赋值 题目 ...

  7. 牛客多校8 - All-Star Game(线段树分治+并查集按秩合并的撤销操作)

    题目链接:点击查看 题目大意:有 n 个球员和 m 个球迷,一个球员可能是多个球迷的粉丝,需要选择最少的球员进行比赛,使得所有的球迷都愿意观看(对于每个球迷来说,都有至少一个其喜欢的球员入选比赛) 对 ...

  8. 牛客 - 牛牛的Link Power II(线段树)

    题目链接:点击查看 题目大意:给出一个01字符串 s ,现在规定每两个 1 的贡献为其在字符串中的距离,现在有 m 次操作,每次操作会把一个位置将 0 变成 1 或者将 1 变成 0 ,问每次操作后字 ...

  9. 牛客-小H的询问(线段树)

    原题链接:更好的阅读体验 题目描述 小H给你一个数组{a},要求支持以下两种操作: 0 l r(1<=l<=r<=n),询问区间[l,r]中权值和最大的有效子区间的权值和,一个子区间 ...

  10. 牛客练习赛52 B:Galahad(树状数组维护区间不同元素和(个数))

    [题目] 查询区间和,如果区间元素重复出现则计数一次. [题解] 按区间的右端点建立树状数组,维护区间[1,R]的每个元素的最右位置.按查询区间的右端点排序,依次处理,每次更新当前值的最右位置即可. ...

最新文章

  1. 常见的和端口,IP相关的企业面试题
  2. 一棵树的生成树有几颗_次小生成树(树剖,生成树)
  3. 理解大型分布式网站你应该知道这些概念
  4. Java趣味分享:try/finally
  5. 【渝粤教育】国家开放大学2018年秋季 1344T金融风险管理 参考试题
  6. 抓包工具,知道手机app上面使用的接口是哪个
  7. Java-eclipse快捷键及设置
  8. weblogic部署,常见错误解决——Unmarshaller failed
  9. LINUX底层文件1008无标题,Linux系统下常见问题的解决方法
  10. php js特效代码如何用,phpstorm编写代码增加代码爆炸效果
  11. 百度李彦宏:自动驾驶最后一公里率先到来;未来20年手机依赖会降低
  12. python爬虫-33个Python爬虫项目实战(推荐)
  13. oracle 2500varchar,Oracle中的varchar和varchar2有什么区别?
  14. stm32 W25QXX系列驱动 W25Q80 W25Q16 W25Q32 W25Q64 W25Q128 W25Q256
  15. u盘插上显示计算机限制,为什么U盘插入电脑后CPU显示100%
  16. 获取及计算可滚动元素高度:区分clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop
  17. 创业手记 Mr.Hua
  18. c/c++源码学习和实践资源,万丈高楼平地起
  19. python实现树结构并显示
  20. 四大国际快递时效、优势对比

热门文章

  1. 视频教程-深入浅出 Zabbix 4.0(基于 zabbix 4.2)-Linux
  2. linux系统带界面,linux系统界面详情介绍
  3. excel条件格式标记一整行
  4. c语言第五章函数课后答案,C语言程序设计(第2版) 刘克威,张凌晓著 习题答案-第五章...
  5. 电脑开机显示器黑屏是什么原因,电脑显示器黑屏怎么办
  6. IMO MSC 307(88)附件1第2部分烟毒性试验
  7. Java后端防止频繁请求、重复提交
  8. 电脑自动关机后文件丢失,如何恢复
  9. 禅道二次开发(三):二次开发实例
  10. Console口和Telnet远程登陆