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. [C/C++] #ifdef和#endif

    一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”.有时,希望当满足某条件时对一组语句进行编译,而当条 ...

  2. numEdit

    说明:  利用tedit扩展的数字编辑框,允许设置正负.小数点等(The digital edit box using tedit extended, allowing the set of posi ...

  3. WebService使用介绍(三)

    jax-ws开发深入 JAX-WS注解 注解说明 WebService的注解都位于javax.jws包下: @WebService-定义服务,在public class上边 targetNamespa ...

  4. mac --snip 滚动截屏

    1.snip 下载配置:https://jingyan.baidu.com/article/fec4bce2458d03f2618d8b8e.html 2.mac的火狐浏览器好像不支持,必须在sofa ...

  5. JSON语法(3)

    JSON语法是JavaScript语法的子集. JSON语法规则 数据在名称/值对中 数据由逗号分割 花括号保存对象 方括号保存数组 JSON名称/值对 JSON数据的书写格式是:名称/值对. 名称/ ...

  6. P3375【模板】KMP字符串匹配

    前言: 额……很久以前就写了KMP模板(只是半知不解),话说看完了manacher,再回过头看KMP,是真TM简单啊!字符串专题整体较抽象,所以必须牢记思路并时常复习 题目描述 如题,给出两个字符串s ...

  7. CTSC && APIO 行程记录

    CTSC: 第一天,看着三道题,只觉得第三题可做.于是写了第一题的暴力就开始写第三题的题答,第二题看了萨菲克斯阿瑞的名字就感觉不会写呀.然而第三题只能胡搞乱搞就只有28分. D1 5 + 0 + 28 ...

  8. [NOIP2017 TG D2T2]宝藏

    题目大意:给定一个有重边,边有权值的无向图.从某一个点出发,求到达所有的点需要的最少费用,并且限制两点之间只有一条路径.费用的计算公式为:所有边的费用之和.而边$x->y$的费用就为:$y$到初 ...

  9. [Leetcode] Roman to integer 罗马数字转成整数

    Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...

  10. 【bzoj2038】[国家集训队2010]小Z的袜子 莫队

    莫队:就是一坨软软的有弹性的东西Duang~Duang~Duang~ 为了防止以左端点为第一关键字以右端点为第二关键字使右端点弹来弹去,所以让左端点所在块为关键字得到O(n1.5)的时间效率,至于分块 ...