3339

思路;

  恶心;

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 200005 struct TreeNodeType {
int l,r,dis,mid,flag; bool if_;
};
struct TreeNodeType tree[maxn<<]; struct QueryType {
int l,r,id;
};
struct QueryType qu[maxn]; int n,m,ai[maxn],sg[maxn],ans[maxn],Next[maxn],last[maxn];
int num[maxn]; inline void in(int &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'') Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
} void tree_build(int now,int l,int r)
{
tree[now].l=l,tree[now].r=r;
if(l==r) { tree[now].dis=sg[l];return; }
tree[now].mid=l+r>>;
tree_build(now<<,l,tree[now].mid);
tree_build(now<<|,tree[now].mid+,r);
tree[now].dis=min(tree[now<<].dis,tree[now<<|].dis);
} void tree_down(int now)
{
tree[now<<].dis=min(tree[now<<].dis,tree[now].flag);
tree[now<<|].dis=min(tree[now<<|].dis,tree[now].flag);
if(tree[now<<].if_) tree[now<<].flag=min(tree[now<<].flag,tree[now].flag);
else tree[now<<].flag=tree[now].flag,tree[now<<].if_=true;
if(tree[now<<|].if_) tree[now<<|].flag=min(tree[now<<|].flag,tree[now].flag);
else tree[now<<|].flag=tree[now].flag,tree[now<<|].if_=true;
tree[now].if_=false;return ;
} void tree_change(int now,int l,int r,int x)
{
if(tree[now].l==l&&tree[now].r==r)
{
tree[now].dis=min(tree[now].dis,x);
if(tree[now].if_) tree[now].flag=min(tree[now].flag,x);
else tree[now].flag=x,tree[now].if_=true;
return ;
}
if(tree[now].if_) tree_down(now);
if(r<=tree[now].mid) tree_change(now<<,l,r,x);
else if(l>tree[now].mid) tree_change(now<<|,l,r,x);
else tree_change(now<<,l,tree[now].mid,x),tree_change(now<<|,tree[now].mid+,r,x);
tree[now].dis=min(tree[now<<].dis,tree[now<<|].dis);
} int tree_query(int now,int to)
{
if(tree[now].l==tree[now].r) return tree[now].dis;
if(tree[now].if_) tree_down(now);
if(to<=tree[now].mid) return tree_query(now<<,to);
else return tree_query(now<<|,to);
} bool cmp(QueryType aa,QueryType bb)
{
return aa.l<bb.l;
} int main()
{
freopen("mex.in","r",stdin);
freopen("mex.out","w",stdout);
in(n),in(m);int now=;
for(int i=;i<=n;i++) in(ai[i]);
for(int i=;i<=n;i++)
{
num[ai[i]]++;
while(num[now]) now++;
sg[i]=now;
if(last[ai[i]]) Next[last[ai[i]]]=i;
last[ai[i]]=i;
}
sg[n+]=now;tree_build(,,n);
for(int i=;i<=n;i++) if(!Next[i]) Next[i]=n+;
for(int i=;i<=m;i++) in(qu[i].l),in(qu[i].r),qu[i].id=i;
sort(qu+,qu+m+,cmp),now=;
for(int no=;no<=m;no++)
{
while(now<qu[no].l) tree_change(,now,Next[now]-,ai[now]),now++;
ans[qu[no].id]=tree_query(,qu[no].r);
}
for(int i=;i<=m;i++) printf("%d\n",ans[i]);
return ;
}

AC日记——Rmq Problem bzoj 3339的更多相关文章

  1. Bzoj 3339: Rmq Problem && Bzoj 3585: mex 莫队,树状数组,二分

    3339: Rmq Problem Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 833  Solved: 397[Submit][Status][D ...

  2. AC日记——Dynamic Problem Scoring codeforces 807d

    Dynamic Problem Scoring 思路: 水题: 代码: #include <cstdio> #include <cstring> #include <io ...

  3. AC日记——[Hnoi2017]影魔 bzoj 4826

    4826 思路: 主席树矩阵加减+单调栈预处理: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 200005 ...

  4. AC日记——[LNOI2014]LCA bzoj 3626

    3626 思路: 离线操作+树剖: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 #defin ...

  5. AC日记——[ZJOI2012]网络 bzoj 2816

    2816 思路: 多个LCT: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 10005 #define l ...

  6. AC日记——[SCOI2009]游戏 bzoj 1025

    [SCOI2009]游戏 思路: 和为n的几个数最小公倍数有多少种. dp即可: 代码: #include <bits/stdc++.h> using namespace std; #de ...

  7. AC日记——[HNOI2014]世界树 bzoj 3572

    3572 思路: 虚树+乱搞: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 300005 #define ...

  8. AC日记——NOI2016区间 bzoj 4653

    4653 思路: 线段树,指针滑动: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1000005 #def ...

  9. AC日记——Collectors Problem uva 10779

    UVA - 10779 思路: 最大流: s向所有的贴纸的种类连边,流量为Bob拥有的数量: 然后,Bob的朋友如果没有这种贴纸,则这种贴纸向bob的朋友连边,容量1: 如果bob的朋友的贴纸很多大于 ...

随机推荐

  1. 集大通APP案例分析

    前言 很多同学有误解: 软件工程课是否就是理论课? 或者是几个牛人拼命写代码,其他人打酱油的课? 要不然就是学习一个程序语言,搞一个职业培训的课? 都不对!软件工程有理论,有实践,更重要的是分析,思辨 ...

  2. Java中break和continue的区别

    continue,继续下一个循环的运算, break,跳出循环

  3. RPC里面的序列化反序列化以及拆包粘包

    1.序列化(1)什么是序列化? Java的序列化是把对象转换成有序字节流的过程.以便进行网络传输或者保存到本地.(2)为什么要序列化? 当两个进程进行远程通信时,如果需要发送各种各样的数据,文本.音频 ...

  4. oracle默认查询当前表空间的数据 当夸空间查询时候 需要指定具体的用户空间

  5. Elasticsearch1.x 和Elasticsearch2.x 拼音分词插件lc-pinyin安装教程

    Elasticsearch1.x 基于lc-pinyin和ik分词实现 中文.拼音.同义词搜索 https://blog.csdn.net/chennanymy/article/category/60 ...

  6. CF858F Wizard's Tour 解题报告

    题目描述 给定一张 \(n\) 个点 \(m\) 条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通. 你想在这张图上进行若干次旅游,每次旅游可以任选一个点 \(x\) 作为起点,再走到一个 ...

  7. final变量属性小记

    final 修饰符对于类成员变量来说,具备语法上不可变的特性:对于类成员方法来说,具备语法上子类不可覆盖重写的特性(能被继承的前提下). 但 final 并不限制子类对父类被修饰声明的成员变量进行覆盖 ...

  8. Spring源码解析-基于注解依赖注入

    在spring2.5版本提供了注解的依赖注入功能,可以减少对xml配置. 主要使用的是 AnnotationConfigApplicationContext: 一个注解配置上下文 AutowiredA ...

  9. [hdu 1067]bfs+hash

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1067 queue里面果然不能放vector,还是自己写的struct比较省内存…… #include& ...

  10. hadoop之HDFS与MapReduce

    Hadoop历史 雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. 随后在2003 ...