【bzoj3339】Rmq Problem

 

Description

Input

Output

Sample Input

7 5
0 2 1 0 1 3 2
1 3
2 3
1 4
3 6
2 7

Sample Output

3
0
3
2
4

HINT

分析

离线算法。

对于[l,r]区间的询问,我们可以线性求出来,然后考虑[l,r]与[l+1,r]区间有什么不同,在a[l]下一次出现的位置之前,所有大于a[l]的mex,都变成是a[l],因为 [l+1,a[l]下一次出现的位置-1],这个区间内没有a[l]了,大于它的数当然可以是它。

所以将询问的先按左端点排序,然后递增左端点,不断更新,用线段树维护。

code

 #include<cstdio>
#include<algorithm>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1 using namespace std; const int MAXN = ;
const int INF = 1e9; struct Que{
int l,r,id;
bool operator < (const Que &x) const
{
return l < x.l;
}
}q[MAXN];
int a[MAXN],sg[MAXN],mn[MAXN<<];
int next[MAXN],last[MAXN],ans[MAXN];
bool vis[MAXN];
int n,m,k = ,now; int read()
{
int x=;char ch=getchar();
while(ch<''||ch>'') {ch=getchar(); }
while(ch>=''&&ch<='') {x=x*+ch-''; ch=getchar(); }
return x;
}
void pushdown(int rt)
{
if (mn[rt]!=INF)
{
mn[rt<<] = min(mn[rt],mn[rt<<]);
mn[rt<<|] = min(mn[rt],mn[rt<<|]);
}
}
void build(int l,int r,int rt)
{
mn[rt] = INF;
if (l==r)
{
mn[rt] = sg[l];
return ;
}
int m = (l+r)>>;
build(lson);
build(rson);
}
void update(int l,int r,int rt,int L,int R,int v)
{
if (L<=l&&r<=R)
{
mn[rt] = min(mn[rt],v);
return ;
}
pushdown(rt);
int m = (l+r)>>;
if (L<=m) update(lson,L,R,v);
if (R>m) update(rson,L,R,v);
}
int query(int l,int r,int rt,int p)
{
if (l==r) return mn[rt];
pushdown(rt);
int m = (l+r)>>;
if (p<=m) return query(lson,p);
else return query(rson,p);
} int main()
{
n = read();m = read();
for (int i=; i<=n; ++i)
a[i] = read();
for (int i=;i<=m; ++i)
q[i].l = read(), q[i].r = read(), q[i].id = i;
sort(q+,q+m+);
for (int i=; i<=n; ++i)
{
vis[a[i]] = true;
while (vis[k]) k++;
sg[i] = k;
}
build(,n,);
for (int i=n; i; --i)
next[i] = last[a[i]], last[a[i]] = i;
now = ; for (int i=; i<=m; ++i)
{
while (now<q[i].l)
{
if (!next[now]) next[now] = n+;
update(,n,,now,next[now]-,a[now]);
now++;
}
ans[q[i].id] = query(,n,,q[i].r);
}
for (int i=; i<=m; ++i)
printf("%d\n",ans[i]);
return ;
}

(……)

【bzoj3339】Rmq Problem的更多相关文章

  1. 【Luogu4137】Rmq Problem/mex (莫队)

    [Luogu4137]Rmq Problem/mex (莫队) 题面 洛谷 题解 裸的莫队 暴力跳\(ans\)就能\(AC\) 考虑复杂度有保证的做法 每次计算的时候把数字按照大小也分块 每次就枚举 ...

  2. 【BZOJ】【3339】Rmq Problem

    离线+线段树 Orz Hzwer,引用题解: 这一题在线似乎比较麻烦 至于离线.. 首先按照左端点将询问排序 然后一般可以这样考虑 首先如何得到1-i的sg值呢 这个可以一开始扫一遍完成 接着考虑l- ...

  3. 【luogu4137】 Rmq Problem / mex - 莫队

    题目描述 有一个长度为n的数组{a1,a2,…,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 思路 莫队水过去了 233 #include <bits/stdc++.h> ...

  4. 【BZOJ2302】[HAOI2011]Problem C(动态规划)

    [BZOJ2302][HAOI2011]Problem C(动态规划) 题面 BZOJ 洛谷 题解 首先如果\(m=0\)即没有特殊限制的话,那么就和这道题目基本上是一样的. 然而这题也有属于这题的性 ...

  5. 【BZOJ4999】This Problem Is Too Simple!(线段树)

    [BZOJ4999]This Problem Is Too Simple!(线段树) 题面 BZOJ 题解 对于每个值,维护一棵线段树就好啦 动态开点,否则空间开不下 剩下的就是很简单的问题啦 当然了 ...

  6. 【BZOJ2298】[HAOI2011]problem a DP

    [BZOJ2298][HAOI2011]problem a Description 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相 ...

  7. 【BZOJ4999】This Problem Is Too Simple! 离线+树状数组+LCA

    [BZOJ4999]This Problem Is Too Simple! Description 给您一颗树,每个节点有个初始值. 现在支持以下两种操作: 1. C i x(0<=x<2 ...

  8. BZOJ3339&&3585 Rmq Problem&&mex

    BZOJ3339&&3585:Rmq Problem&&mex Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最 ...

  9. 【计算几何】FZU Problem 2270 Two Triangles

    http://acm.fzu.edu.cn/problem.php?pid=2270 [题意] 给定6到10个点,从中选出6个不同的点组成两个三角形,使其中一个三角形可以通过另一个三角形平移和旋转得到 ...

随机推荐

  1. ubuntu下编译安装mysql记录

         搞了整整一天,好不容易折腾完,在此记录下,下次就省事了.     去官网http://www.php.net/downloads.php下载所需要的php版本,这里我选择5.6.22.    ...

  2. FusionCharts使用JavaScript渲染图表(不用Flash)

    FusionCharts可以让用户只使用JavaScript建立图表(而不是使用Flash),只需要添加另一行代码,如下所示: FusionCharts.setCurrentRenderer('jav ...

  3. Eucalyptus常用查询命令

    前言: Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus)  ...

  4. java 千分位的添加和去除

    转至:http://blog.sina.com.cn/s/blog_8f99a1640102v1xh.html 将一个数字转换为有千分位的格式: NumberFormat numberFormat1  ...

  5. VS功能扩展--扩展介绍

    使用Eclipse的朋友都知道Eclipse是一个完全可扩展的IDE,那么在windows程序开发时,我们常使用的IDE(Visual studio)是否具有功能的扩展性呢?毫无疑问,回答是肯定的.我 ...

  6. uLua学习之数据交互(三)

    前言 在上节中,大概谈了一下如何在lua脚本中调用unity3d中的方法来创建游戏物体,这只是很小的一个方面,uLua的优势在于对unity3d中C#语言的扩展和定制.那么如何扩展和定制呢?其中的数据 ...

  7. jenkins代码自动部署

    jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的"自动化"编译.打包.分发部署.jenkins可以很好的支持各种语言(比如:java, ...

  8. Shell脚本 - 用来检查memcache并自动重启生效脚本

    #!/bin/sh#check memcache process and restart if downmm_bin="/usr/local/bin/memcached"mm_lo ...

  9. CSS第二节

    div做页面布局的建议 把整个网页从上到下分成若干块(一般分三块:头,中间,尾部),每一块都按下面的思路 先写第一层,可以设置背景色,或者高度和垂直居中(line-height保证内容不超出高度),不 ...

  10. IOS 一些好的框架和 技术大牛的博客

    http://blog.csdn.net/rodulf/article/details/51871093  比较好的框架链接: http://www.jianshu.com/p/9216c561b0f ...