考试的时候切的,类似HH的项链~

code:

#include <bits/stdc++.h>
#define ll long long
#define M 500003
#define N 2000005
#define inf 100000000
#define lson now<<1
#define rson now<<1|1
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,q,m;
int output[M],lst[N],A[M],Min[M<<2];
struct query
{
int l,r,id;
}pp[M];
bool cmp(query a,query b)
{
return a.r<b.r;
}
void build(int l,int r,int now)
{ if(l==r) { Min[now]=inf; return; }
int mid=(l+r)>>1;
if(l<=mid) build(l,mid,lson);
if(r>mid) build(mid+1,r,rson);
Min[now]=inf;
}
void update(int l,int r,int now,int p,int v)
{
if(l==r)
{
Min[now]=v;
return;
}
int mid=(l+r)>>1;
if(p<=mid) update(l,mid,lson,p,v);
else update(mid+1,r,rson,p,v);
Min[now]=Min[lson];
if(r>mid) Min[now]=min(Min[now],Min[rson]);
}
int query(int l,int r,int now,int L,int R)
{
if(l>=L&&r<=R) return Min[now];
int re=inf,mid=(l+r)>>1;
if(L<=mid) re=min(re, query(l,mid,lson,L,R));
if(R>mid) re=min(re, query(mid+1,r,rson,L,R));
return re;
}
int main()
{
// setIO("input");
int i,j,k=1,lk=0;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%d",&A[i]);
A[i]^=A[i-1];
}
for(i=1;i<=m;++i)
{
scanf("%d%d",&pp[i].l,&pp[i].r);
pp[i].id=i;
}
build(1,n,1);
sort(pp+1,pp+1+m,cmp);
for(i=0;i<N;++i) lst[i]=-1;
lst[0]=0;
for(i=k=1;k<=m;++k)
{
for(;i<=pp[k].r&&i<=n;++i)
{
if(lst[A[i]]!=-1)
{
update(1,n,1,lst[A[i]]+1,i-lst[A[i]]);
}
lst[A[i]]=i;
}
int tmp=query(1,n,1,pp[k].l,pp[k].r);
output[pp[k].id]=(tmp==inf)?-1:tmp;
}
for(i=1;i<=m;++i) printf("%d\n",output[i]);
return 0;
}

  

牛客练习赛53 (E 老瞎眼 pk 小鲜肉) 线段树+离线的更多相关文章

  1. 牛客练习赛53 E 老瞎眼 pk 小鲜肉 (线段树,思维)

    链接:https://ac.nowcoder.com/acm/contest/1114/E来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...

  2. 牛客练习赛53 E-老瞎眼pk小鲜肉(思维+线段树+离线)

    前言 听说是线段树离线查询?? 做题做着做着慢慢对离线操作有点感觉了,不过也还没参透,等再做些题目再来讨论离线.在线操作. 这题赛后看代码发现有人用的树状数组,$tql$.当然能用树状数组写的线段树也 ...

  3. 牛客练习赛53E 老瞎眼 pk 小鲜肉(线段树)

    链接:https://ac.nowcoder.com/acm/contest/1114/E来源:牛客网题目:老瞎眼有一个长度为 n 的数组 a,为了为难小鲜肉,他准备了 Q 次询问,每次给出 一个区间 ...

  4. 老瞎眼 pk 小鲜肉 (线段树)

    链接:https://ac.nowcoder.com/acm/contest/1114/E来源:牛客网 题目描述 老瞎眼有一个长度为 n 的数组 a,为了为难小鲜肉,他准备了 Q 次询问,每次给出 一 ...

  5. 牛客练习赛53 D 德育分博弈政治课 (思维建图,最大流)

    牛客练习赛53 D德育分博弈政治课 链接:https://ac.nowcoder.com/acm/contest/1114/D来源:牛客网 题目描述 德育分学长最近玩起了骰子.他玩的骰子不同,他的骰子 ...

  6. 牛客练习赛53 A 超越学姐爱字符串 (DP)

    牛客练习赛53 超越学姐爱字符串 链接:https://ac.nowcoder.com/acm/contest/1114/A来源:牛客网 超越学姐非常喜欢自己的名字,以至于英文字母她只喜欢" ...

  7. 牛客练习赛53 A-E

    牛客联系赛53 A-E 题目链接:Link A 超越学姐爱字符串 题意: 长度为N的字符串,只能有C,Y字符,且字符串中不能连续出现 C. 思路: 其实就是DP,\(Dp[i][c]\) 表示长度为 ...

  8. 【牛客练习赛53】A-超越学姐爱字符串

    // 题目地址:https://ac.nowcoder.com/acm/contest/1114/A /* 找规律(碰运气) n:1 = 2 n:2 = 3 n:3 = 5 n:4 = 8 ... d ...

  9. 牛客练习赛53 B 美味果冻

    链接:https://ac.nowcoder.com/acm/contest/1114/B来源:牛客 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言10485 ...

随机推荐

  1. 【百度之星2019】Strassen

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6719 在本题中,我们只有两种方法计算两个的矩阵的乘积,第一种为定义法,需要次乘法和次加法.第二种为 ...

  2. python实现数字0开始的索引,对应Execl的字母方法

    字母转数字方法: import re col = row = [] # 输入正确格式的定位,A2,AA2有效,AAB2无效 while len(col) == 0 or len(row) == 0 o ...

  3. ASP.NET Core分布式项目-2.oauth密码模式identity server4实现

    源码下载 这里根据<ASP.NET Core分布式项目-1.IdentityServer4登录中心>的代码来继续更新oauth密码模式,这里的密码模式比上次的客户端模式更安全 在WebAp ...

  4. [Vue]Vue keep-alive

    keep-alive 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们.和 <transition> 相似,<keep-alive> 是一个抽象组件:它自身不会渲染一个 ...

  5. (十一)mybatis之整合ehcache缓存

    一.二级缓存 大家都知道使用mybatis就要先获取sqlsessionfactory,继而使用sqlsession来和数据库交互,每次只需要使用sqlsession对象提供的方法就好,当我们需要第一 ...

  6. 调用顺丰API实现电商专递下单和获取面单功能

    参考文章:https://www.cnblogs.com/zhangxiaoyong/p/8317229.html 顺丰需求文档: 链接:https://pan.baidu.com/s/16EEaph ...

  7. [JZOJ5279]香港记者题解--最短路图

    [JZOJ5279]香港记者题解--最短路图 题目链接 过 于 暴 力 分析 有一个naiive的想法就是从1到n跑最短路,中途建图,然后在图上按字典序最小走一遍,然而·这是不行的,你这样跳不一定能跳 ...

  8. leetcode-101. 判断对称树 · Tree + 递归

    题面 判断给定二叉树是否对称. Note : empty tree is valid. 算法 1. 根节点判空,若空,则返回true;(空树对称) 2. 根节点不空,递归判断左右子树.如果左右孩子都空 ...

  9. char str = '1.2.';问题

    偶然看到群里老哥问道这个问题 #include <iostream> using namespace std; int main() { char str = '1.2.'; ; } 什么 ...

  10. nginx加入开机自启动

    1.首先,在linux系统的/etc/init.d/目录下创建nginx文件,使用如下命令:(vim /etc/init.d/nginx) 2.在/etc/init.d/nginx中写入以下脚本代码 ...