题意:
老瞎眼有一个长度为 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. 面试前赶紧看了5道Python Web面试题,Python面试题No17
  2. Linux服务器---安装tftp-server
  3. python读取excel-Python Pandas读取修改excel操作攻略
  4. 用Java模拟网卡、声卡继承PIC接口,实现网卡、声卡能与主板连接
  5. 中缀表达式生成二叉树
  6. 递归删除文件夹下面所有子文件夹中的.pyc后缀文件
  7. php一行多个商品,【后端开发】php一行展示多个商品怎么实现
  8. Qt ModbusTCP ModbusRTU 使用同步读和异步写
  9. 10年+,阿里沉淀出怎样的搜索引擎?
  10. 处理SQLServer死锁
  11. Linux内核源码如何学习?
  12. C#窗体标准计算器(下) 初级新手请多担待。
  13. MFC CImage透明图片显示
  14. 大学计算机基础课都学什么,大学计算机基础课程
  15. 电动汽车结构原理基础知识
  16. 教你使用IL2CppDumper从Unity il2cpp的二进制文件中获取类型、方法、字段等(反编译)
  17. 蓝拓扑便携式分析仪驱动程序_拔出便携式USB硬盘驱动器会损坏计算机吗?
  18. 【Unity2D】关卡编辑好帮手——TileMap
  19. 【Python 打开Raw data】
  20. android计时器和倒计时

热门文章

  1. 无线扩展器中继器 和 电力猫 性能比较
  2. python 006 __ 小斌文档 | 特殊字符的使用
  3. 由于系统错误 1114:动态连接库(DLL)初始化例程失败。(MySQL ODBC 5.3 Unicode Driver,c:\Program Files(x86)\MySQL\Connector
  4. 企业办理icp许可证有没必要-icp许可证
  5. 如何设置和解除PDF文件保护?
  6. 【OpenGL开发】关于GLEW扩展库
  7. 用易升升级到Win10后在第三方浏览器无法打开网页的解决办法
  8. Electron无边框模式下禁止双击最大化窗口
  9. Android动画学习之帧动画二
  10. 【Mac】微信视频对方听不见你的声音