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. 算法(12)Pascal's Triangle II

    题目:输出帕斯卡三角的第k行 思路:真没思路,发现几个easy的题不容易想!这里的大致思路是从后开始更新第k行!

  2. php: Can't use function return value in write context

    关于empty()函数, php手册中提到,php5.5之前empty()函数只支持检查变量,传入任何其他的表达式或函数都会产生语法错误. Note: Prior to PHP 5.5, empty( ...

  3. [zhuan]Android安全讲座第九层(二) 内存dump

    http://sunzeduo.blog.51cto.com/2758509/1409450 近来android上越来越多的应用对自身的保护机制加强了重视,主要表现在几个方面. 1 dex加壳 2 s ...

  4. python3创建目录

    感觉python3最好用的创建目录函数是os.makedirs,它可以设置在多级目录不存在时自动创建,已经存在也不抛出异常. import os os.makedirs('hello/hello1/h ...

  5. POJ2289:Jamie's Contact Groups(二分+二分图多重匹配)

    Jamie's Contact Groups Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/ ...

  6. Linux重定向: > 和 &> 区别

    总结:>只能将正常信息重定向 &>可以将错误信息或者普通信息都重定向输出(下面是实测) [root@Dev_yang shellScript]# lll -bash: lll: c ...

  7. APP本地服务安全测试

    一.安全测试基本分类: 1.系统安全 系统加固 安全加固:比如linux中关闭telnet端口,修改ssh端口 检测一些不必要的服务(需要卸载一个ping)--保证系统的最小集 app安全加固:加一层 ...

  8. C# Producer Consumer (生产者消费者模式)demo

    第一套代码将producer Consumer的逻辑写到from类里了,方便在demo的显示界面动态显示模拟生产和消费的过程.     第二套代码将producer Consumer的逻辑单独写到一个 ...

  9. white-space——处理元素内的空白

      定义和用法 white-space 属性设置如何处理元素内的空白.这个属性声明建立布局过程中如何处理元素中的空白符.值 pre-wrap 和 pre-line 是 CSS 2.1 中新增的. 默认 ...

  10. 【洛谷 P1364】医院设置(树的重心)

    树的重心的定义: 树若以某点为根,使得该树最大子树的结点数最小,那么这个点则为该树的重心,一棵树可能有多个重心. 树的重心的性质: 1.树上所有的点到树的重心的距离之和是最短的,如果有多个重心,那么总 ...