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. PokeCats开发者日志(三)

      现在是PokeCats游戏开发的第四天的晚上,明天要过周末了,所以提前写一下开发者日志吧! day4   day4主要是优化界面和增加游戏可玩性.   (1)感觉只有三只喵喵的话,玩家只需要无脑点 ...

  2. P2124 奶牛美容

    题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 6 16 ................ ..XXXX....XXX... ...XXXX....XX... .XXXX ...

  3. Java Web开发之路(一)——环境配置

    1. 下载JDK(Java Development Kit)工具包.其中包括运行Java程序所必须的JRE环境及开发过程中常用的库文件. (JDK与JRE的关系: JDK是Java的开发环境,在编写J ...

  4. visio应用程序相关设置-选项-常规

    1.用户名称,可读写 ApplicationSettings.UserName m_Visio.Window.Application.Settings.UserName = "BEIJING ...

  5. [Leetcode] add binary 二进制加法

    Given two binary strings, return their sum (also a binary string). For example,a ="11"b =& ...

  6. Generator的基本用法

    Generator函数是一个状态机,封装了多个内部状态.执行一个Generator,会返回一个迭代器对象,通过迭代器对象,可以遍历Generator函数内部的每个状态.因此,Generator函数可以 ...

  7. 插头dp题表

    bzoj1814: Ural 1519 Formula 1 bzoj3125: CITY bzoj1210: [HNOI2004]邮递员 bzoj2331: [SCOI2011]地板 bzoj1187 ...

  8. 用JavaScript实现一个简单的树结构

    数据源用数组混json结构,实现了基本的功能.效率一般,跟 dhtree 梅花雪树对比了下,都差不多. (ps感觉比dhtree快点,跟梅花雪树差不多,个人测试) 这个实现树的原理是根据json,不断 ...

  9. MySQL里执行SHOW INDEX结果中Cardinality的含义

    今天在写一个Perl脚本,想自动化查找出MySQL数据库中可能无效的索引,于是根据朝阳的书上提到的一些规则,我来设计了一些判断方法,其中发现某个我想要的值就是SHOW INDEX FROM table ...

  10. Palindrome [Manecher]

    Palindrome Time Limit: 15000MS Memory Limit: 65536K Total Submissions: 12214 Accepted: 4583 Descript ...