#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX = +;
int res[MAX<<],ans[MAX],t[MAX];
int a[MAX],last[MAX];
struct node {
    int L,R,id,d;
    bool operator <(const node rhs) const {
        return R<rhs.R;
    }
}v[MAX];
void push_up(int o) {
   res[o]=max(res[o<<],res[o<<|]);
}
void build(int L,int R,int o) {
    if(L==R) {
        res[o]=a[L];
        return ;
    }
    int mid=(L+R)>>;
    build(L,mid,o<<);
    build(mid+,R,o<<|);
    push_up(o);
}
int Query1(int L,int R,int o,int ls,int rs) {
    if(ls<=L&&rs>=R) {
        return res[o];
    }     int mid=(L+R)>>;
    int tt=;
    if(ls<=mid) tt=max(tt,Query1(L,mid,o<<,ls,rs));
    if(rs>mid) tt=max(tt,Query1(mid+,R,o<<|,ls,rs));
    return tt;
}
int sum[MAX];
int lowbit(int x) {
    return x&-x;
}
void modify(int pos,int val) {
    for(int i=pos;i<MAX;i+=lowbit(i)) {
        sum[i]+=val;
    }
}
int Query(int pos) {
    int res=;
    for(int i=pos;i;i-=lowbit(i)) {
        res+=sum[i];
    }
    return res;
}
int main() {
    int n,m;
    while(scanf("%d %d",&n,&m)==) {
        for(int i=;i<=n;i++) {
            scanf("%d",&a[i]);
        }
        build(,n,);
        for(int i=;i<=m;i++) {
            scanf("%d %d",&v[i].L,&v[i].R) ;
            v[i].id=i;
            v[i].d=(v[i].R-v[i].L+);
        }
        sort(v+,v++m);
        memset(sum,,sizeof(sum));
        memset(last,,sizeof(last));
        int j=;         for(int i=;i<=n;i++) {
            if(last[a[i]]) {
                modify(last[a[i]],-);
            }
            modify(i,);
            last[a[i]]=i;
            while(i==v[j].R&&j<=m) {                 ans[v[j].id]=Query(v[j].R)-Query(v[j].L-);
              //  printf("%d %d %d\n",ans[v[j].id],v[j].d,Query1(1,n,1,v[j].L,v[j].R));
                if(ans[v[j].id]==v[j].d&&Query1(,n,,v[j].L,v[j].R)==v[j].d) {
                    t[v[j].id]=;
                }
                else t[v[j].id]=;
                j++;
            }
        }
        for(int i=;i<=m;i++) {
            if(t[i]) printf("YES\n");
            else printf("NO\n");
        }
    }
    return ;
}

BestCoder Round #29 GTY's gay friends的更多相关文章

  1. BestCoder Round #29 1003 (hdu 5172) GTY's gay friends [线段树 判不同 预处理 好题]

    传送门 GTY's gay friends Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  2. BestCoder Round #29——A--GTY's math problem(快速幂(对数法))、B--GTY's birthday gift(矩阵快速幂)

    GTY's math problem Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  3. bestcoder Round #7 前三题题解

    BestCoder Round #7 Start Time : 2014-08-31 19:00:00    End Time : 2014-08-31 21:00:00Contest Type : ...

  4. BestCoder Round #89 02单调队列优化dp

    1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01  HDU 5944   水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...

  5. BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元

    BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy  Init函数 然后统计就ok B. 博弈 题  不懂  推了半天的SG.....  结果这 ...

  6. Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp

    Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  7. Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  8. 暴力+降复杂度 BestCoder Round #39 1002 Mutiple

    题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...

  9. 贪心 BestCoder Round #39 1001 Delete

    题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ # ...

随机推荐

  1. 使用Apache Commons IO组件读取大文件

    Apache Commons IO读取文件代码如下: Files.readLines(new File(path), Charsets.UTF_8); FileUtils.readLines(new ...

  2. java 字符串截取的几种方式

    1.split()+正则表达式来进行截取. 将正则传入split().返回的是一个字符串数组类型.不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时. String str = " ...

  3. shell脚本中定义路径变量出现的BUG

    =========================================================================== if 语句中的定义路径变量 引发命令的PATH路 ...

  4. 工作中js和jquery 函数收集

    1. 判断单选框是否选中  $("xxx").is(":checked")       返回类型是 true/false 2. $(this)[0].nextS ...

  5. C/C++ 各进制赋值、int/char转换、sscanf/sprintf、位操作运算

    一.各进制赋值 1.十六进制赋值 int i=0x12AD; int i=0X12AD; int i=0x12Ad; int i=0X12Ad; //以上都是十六进制,表示十进制173: 2.八进制赋 ...

  6. Java多线程编程核心技术---Lock的基本概念和使用

    Lock接口: ReentrantLock的基本功能: ReentrantLock的lock和unlock方法进行加锁,解锁.可以起到和synchronized关键字一样的效果: 选择性通知!!!: ...

  7. 迅为iTOP-4418/6818开发板MiniLinux下的GPS使用手册

    平台:iTOP-4418/6818开发板 系统:MiniLinux 在 Mini Linux 系统环境下 iTOP-4418 和 6818 的 GPS 实验调试步骤.给用户提供了“iTOP-4418- ...

  8. [转载]迅为4418开发板Qt移植移动4G模块第一部分

        本文转自迅为论坛:http://topeetboard.com   平台:iTOP-4418开发板   1.首先要配置内核,这个一步和Android系统移植3G或者4G模块是一样的.一般模块的 ...

  9. vsphere中的linux虚拟机安装vmware-tools

    先在vcenter中选中虚拟机点击安装这个工具,如图 然后这台linux虚拟机的控制台操作,挂载先建立挂载目录 cd /mnt #在挂载建一个用来挂载的文件. mkdir cdrom 使用mount命 ...

  10. CAD参数绘制直线(com接口)

    用户可以在CAD控件视区任意位置绘制直线. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下: 参数 说明 DOUBLE dX1 直线的开始点x坐标 DOUBLE ...