题目大意

给定一个序列,q个查询
查询(l,r)内 异或值=0 的最小区间

题目分析

考虑对序列求一个前缀异或和
那么 每个点找到与自己相同的最近的点的位置,就是每个点作为右端点 =0 的最小区间。

所有的查询区间按照右端点排序

然后我们枚举1,n所有点,在线段树 该店对应左端点的位置插入这个区间长度。
对于所有右端点为i的询问 查询(l,r)区间内的最小值即可

代码详解

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn =6e5+50;
const int maxm =2e6+60;
int n,q;
struct node
{int ans=inf;int id;int l,r;
}t[maxn];
int a[maxm];
int pre[maxm];
int last[maxm];
int le[maxm];
bool cmp(node a,node b)
{if(a.r==b.r) return a.l>b.l;return a.r<b.r;
}
struct Node
{//int data;int l,r;int mn;
}tree[maxn*4];
void pushup(int root)
{tree[root].mn = min(tree[root*2].mn,tree[root*2+1].mn);
}
void build(int root,int l,int r)
{if(r<l)return;tree[root].l = l; tree[root].r = r;if(l==r) {tree[root].mn = inf;return;}int mid = (l+r)/2;build(root*2,l,mid);build(root*2+1,mid+1,r);pushup(root);
}
void update(int root,int k,int val)
{int l = tree[root].l; int r = tree[root].r;if(l==r) {tree[root].mn =val;return;}int mid = (l+r)/2;if(mid<k) update(root*2+1,k,val);else update(root*2,k,val);pushup(root);//cout<<tree[root].mn
}
int query(int root,int st,int ed)
{int l = tree[root].l;int r = tree[root].r;
//  cout<<l<<" "<<r<<" "<<tree[root].mn<<endl;if(st<=l&&ed>=r) return tree[root].mn;else if(st>r||ed<l) return inf;int ans = inf;ans = min(ans,query(root*2,st,ed));ans = min(ans,query(root*2+1,st,ed));return ans;
//  if(tree[root].l == tree[root].r)
}
bool cmp2(node a,node b)
{return a.id<b.id;
}
int main()
{scanf("%d%d",&n,&q);for(int i=1;i<=n;i++) scanf("%d",&a[i]);pre[0] = 0;memset(last,-1,sizeof(last)); last[0] = 0;for(int i=1;i<=n;i++){pre[i]=pre[i-1]^a[i];le[i] = last[pre[i]];last[pre[i]] = i;}for(int i=1;i<=q;i++){scanf("%d%d",&t[i].l,&t[i].r);t[i].id= i;}sort(t+1,t+1+q,cmp);build(1,1,n);for(int i=1;i<=q;i++){int r = t[i].r;if(le[r]!=-1){update(1,le[r]+1,r-le[r]);}t[i].ans = query(1,t[i].l,t[i].r);}sort(t+1,t+1+q,cmp2);for(int i=1;i<=q;i++){if(t[i].ans<maxm)printf("%d\n",t[i].ans);else printf("-1\n");}return 0;
}

牛客练习赛53 老瞎眼 pk 小鲜肉[思维+离线+线段树]相关推荐

  1. 牛客网 牛客练习赛13 C.幸运数字Ⅲ-思维

    C.幸运数字Ⅲ 链接:https://www.nowcoder.com/acm/contest/70/C 来源:牛客网 这个题447和477是特殊的,其他的就没什么了. 代码: 1 #include& ...

  2. 牛客练习赛33 D tokitsukaze and Inverse Number (树状数组求逆序对,结论)

    链接:https://ac.nowcoder.com/acm/contest/308/D 来源:牛客网 tokitsukaze and Inverse Number 时间限制:C/C++ 1秒,其他语 ...

  3. 牛客练习赛85-哲学家的沉思-(上升子序列变形+树状数组+线段树+离散化+set)

    C 题意: 就是给你一个数组.接下来他会进行 qqq 次询问,每次询问将 给出两个数字 lll 与 rrr ,要你把 [l,r][l, r][l,r] 区间划分为若干个片段[l1,r1],[l2,r2 ...

  4. 2021牛客多校1 - Journey among Railway Stations(线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列表示火车站,每个火车站都有两个属性 [u,v][u,v][u,v],表示在站时间.相邻两个火车站之间有一个距离,即从第 iii 个火车站到第 ...

  5. 牛客小白月赛 20 E区区区间(线段树)

    传送门 类似题:题目链接 题目: Keven 特别喜欢线段树,他给你一个长度为 n 的序列,对序列进行 m 次操作. 操作有两种: 1 l r k :表示将下标在 [l , r][l,r] 区间内的数 ...

  6. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

  7. 牛客练习赛44 B 小y的线段 (思维)

    链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 题目描述 给出n条线段,第i条线段的长度为a_ia i ​ ,每次可以从第i条线段的j位置跳到第 ...

  8. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. 牛客练习赛#105(A-D)

    牛客练习赛#105 文章目录 牛客练习赛#105 A.切蛋糕的贝贝 B.抱歉,这没有集美 C.打牌的贝贝 D.点分治分点 A.切蛋糕的贝贝 题意 有一个正n边形,想通过下列的切法切成面积比为1:1:4 ...

  10. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

最新文章

  1. 调整Win7资源管理器中导航栏和计算机的位置
  2. web服务枚举组件不可用
  3. eos交易同步过程和区块生产过程源码分析
  4. 读薄《高性能MySql》(四)查询性能优化
  5. 在 docker中 运行 mono /jexus server 并部署asp.net mvc站点
  6. 中兴zxr10路由器重启命令_蒲公英路由器刷第三方固件(一)
  7. 如何将qq客服搬到我们的flex应用中
  8. 怎么样测试需要登录的接口?需要登录的接口怎么测试性能?
  9. win10计算机扫描,Win10系统下如何使用扫描仪
  10. STM32F207时钟系统解析
  11. 一键下载优美图库图片(附源码了哦)
  12. Linux命令 - 覆盖 > 和 追加 >>
  13. flask_restful中的输出域(Resource、fields、marshal、marshal_with)
  14. 数据库 之创建新用户
  15. 线性表的顺寻存储结构
  16. #大创学习笔记#part1宫颈癌细胞图像分割——直方图最亮谷底阈值确定法提取细胞前景
  17. Revit 2020发布
  18. 字节流之文件输入流FileInputStream(上)
  19. 华为设备配置VRRP与NQA联动监视上行链路
  20. 十三年前雷军跟我说:中国to B向toC学习,可能能走出一条道儿来

热门文章

  1. docker mysql 修改cnf_Docker下Mysql .cnf文件修改小贴士
  2. oracle的month函数的使用方法,oracle add_month函数
  3. 计算机转魔方最快多少,人类最快还原魔方的极限时间是几秒?
  4. 【备忘】李炎恢老师HTML5+CSS3教程与课件代码【共享完毕】下载
  5. git 拉取子目录 child-dir (父目录为:parent-dir)
  6. 用esp8266开发板制作WiFi Killer
  7. 欧洲足球协会联盟使用区块链发售马德里德比超级杯门票
  8. 软考信息系统项目管理师论成本管理范文
  9. 简单线性回归截距假设检验_统计推断——假设检验——简单线性回归分析
  10. 北京机动车和自住房摇号查询