• Evanyou Blog 彩带


      题目传送门

      

    题目描述

    现有数列 A_1,A_2,cdots,A_NA1,A2,,AN ,Q 个询问 (L_i,R_i)(Li,Ri) , A_{Li} ,A_{Li+1},cdots,A_{Ri}ALi,ALi+1,,ARi 是否互不相同

    输入输出格式

    输入格式:

     

    第1 行,2 个整数 N,QN,Q

    第2 行,N 个整数 A_{Li} ,A_{Li+1},cdots,A_{Ri}ALi,ALi+1,,ARi

    Q 行,每行2 个整数 L_i,R_iLi,Ri

     

    输出格式:

     

    对每个询问输出一行,“Yes” 或者“No”

     

    输入输出样例

    输入样例#1: 复制
    4 2
    1 2 3 2
    1 3
    2 4
    输出样例#1: 复制
    Yes
    No

    说明

    • 对于50% 的数据, N,Q le 10^3N,Q103

    • 对于100% 的数据, 1 le N,Q le 10^5, 1 le A_i le N, 1 le L_i le R_i le N1N,Q105,1AiN,1LiRiN


      分析:很明显的莫队模板,轻松A。不过过程中被卡了读优。。。有点尴尬。。。

      Code:

    #include<bits/stdc++.h>
    #define Fi(i,a,b) for(int i=a;i<=b;i++)
    using namespace std;
    const int N=1e5+7;
    int n,m,s,num=0,d[N],pos[N],sum[N];bool ans[N];
    struct Node{int l,r,id;}a[N];
    inline bool cmp(Node x,Node y)
    {return pos[x.l]==pos[y.l]?x.r<y.r:x.l<y.l;}
    inline void change(int i,bool f)
    {
      if(f){sum[d[i]]++;if(sum[d[i]]==1)num++;}
      else {sum[d[i]]--;if(sum[d[i]]==0)num--;}
    }
    int main()
    {
      ios::sync_with_stdio(false);
      cin>>n>>m;s=int(sqrt(n));
      memset(ans,false,sizeof(ans));
      Fi(i,1,n){cin>>d[i];pos[i]=(i-1)/s+1;}
      Fi(i,1,m){cin>>a[i].l>>a[i].r;a[i].id=i;}
      sort(a+1,a+1+m,cmp);int l=1,r=0;
      Fi(i,1,m){
        while(l<a[i].l)change(l++,0);
        while(l>a[i].l)change(--l,1);
        while(r<a[i].r)change(++r,1);
        while(r>a[i].r)change(r--,0);
        if(num==a[i].r-a[i].l+1)ans[a[i].id]=true;}
      Fi(i,1,m)if(ans[i])printf("Yes
    ");else printf("No
    ");
      return 0;
    }
  • 相关阅读:
    ArtTmeplate模板+取结接口
    取接口
    ionic 基本布局
    angular通过路由实现跳转 resource加载数据
    总结
    JSON和JSONP
    js中sort()方法的用法,参数以及排序原理
    计算机语言的发展史
    Jquery+PHP实现简单的前后台数据交互实现注册登录,添加留言功能
    Jquery回调函数应用实例解析
  • 原文地址:https://www.cnblogs.com/cytus/p/9082565.html
Copyright © 2020-2023  润新知