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

考试的时候切的,类似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;    
}

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值