【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. LESS CSS非常实用实例应用

    @charset "UTF-8"; @base-color:#333; // 圆角 .border-radius (@radius: 5px) { -webkit-border-r ...

  2. js绑定事件方法:addEventListener的兼容问题

    js的事件绑定方法中,ie只支持attachEvent,而FF和Chrome只支持addEventListener;严格来说:addEventListener只有IE9以上版本的IE浏览器上能够兼容, ...

  3. Android 超简单的拖动按钮 悬浮按钮 吸附按钮

    第一种    第二种    第一种实现方法 xml布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/re ...

  4. Eucalyptus简介

    1.Eucalyptus是什么? Eucalyptus  n.桉树 Eucalyptus is a Linux-based software architecture that implements ...

  5. COGS 1365. [HAOI2013] 软件安装

    ★★☆   输入文件:haoi13t4.in   输出文件:haoi13t4.out   简单对比时间限制:1 s   内存限制:128 MB Dr.Kong有一个容量为N MB (1 <= N ...

  6. MAC 设置登录欢迎语

    MacdeMacBook-Pro:etc mac$ cd /etc MacdeMacBook-Pro:etc mac$ cat motd 技术沉淀,空杯心态! _______ _______ _ __ ...

  7. kubernetes-服务发现service(九)

    service •防止Pod失联    •定义一组Pod的访问策略    •支持ClusterIP,NodePort以及LoadBalancer三种类型    •Service的底层实现主要有ipta ...

  8. Luogu [P1334] 瑞瑞的木板(手写堆)

    其实这个题完全不需要用手写堆,只需要一遍遍sort就行了…… 但是! 为了练习手写堆,还是用手写堆做了. 在做本题之前,如果你没有什么思路的话,建议先做Luogu的合并果子. 好,假设你已经做过了合并 ...

  9. RuPengGame游戏引擎 精灵 createSprite 创建 setSpritePosition 设置位置 playSpriteAnimate 播放动画 setSpriteFlipX设置翻转 精灵图片下载地址

    package com.swift; import java.awt.Point; import com.rupeng.game.GameCore;//导入游戏引擎包 public class Gam ...

  10. oc字典放入到数组里,根据字典里的属性排序(重点)

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...