传送:http://acm.hdu.edu.cn/showproblem.php?pid=6483

题意:有长度为$n$的数组,对于一个子区间$[l,r]$内,存在最大值$mx$与最小值$mi$,有$q$的询问,每个询问要求判断在某个子区间$[l,r]$内$[mi,mx]$的值是否连续存在,即$mi,mi+1,....,mx$每个数都出现过至少一次。$T=5,1<=n<=10000,1<=a_i<=10^9,1<=m<=100000$

分析:

多个区间查询问题,考虑莫队算法。

对于每一个询问,需要判断$mi$到$mx$内的数是否全部存在,且需要知道$mi$与$mx$。考虑先预处理出每个子区间的最值,离线查询。

$a_i<=10^9$,数组$num[]$没办法开下,需要离散化处理。

先ST预处理最值,然后离散化,莫队求区间内值种类的个数。

代码:

 #include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+;
struct node{
int l,r,id,block,mx,mi;
}q[maxn];
int a[maxn],b[maxn],maxPoint[maxn][],minPoint[maxn][],num[maxn];
bool ans[maxn];
int cnt=,n,m,block,ll,rr;
bool cmp(node p,node q){
return p.block<q.block || p.block==q.block && p.r<q.r;
}
void add(int x){
int tmp=a[x];
if (num[tmp]==) cnt++;
num[tmp]++;
}
void del(int x){
int tmp=a[x];
if (num[tmp]==) cnt--;
num[tmp]--;
}
void init(){
for (int i = ; i <= n; i++){
minPoint[i][] = maxPoint[i][] = a[i];
}
for (int j = ; ( << j) <= n; j++){
for (int i = ; i + ( << j) - <= n; i++){
int p = ( << (j - ));
minPoint[i][j] = min(minPoint[i][j - ], minPoint[i + p][j - ]);
maxPoint[i][j] = max(maxPoint[i][j - ], maxPoint[i + p][j - ]);
}
}
}
int queryMin(int l, int r){
int k = log2((double)(r - l + ));
return min(minPoint[l][k], minPoint[r - ( << k) + ][k]);
} int queryMax(int l, int r){
int k = log2((double)(r - l + ));
return max(maxPoint[l][k], maxPoint[r - ( << k) + ][k]);
}
bool calc(node tmp){
if (tmp.mx-tmp.mi+==cnt) return true;
return false;
}
void init2(){
sort(b+,b++n);
int tmp=unique(b+,b++n)-(b+);
for (int i=;i<=n;i++){
a[i]=lower_bound(b+,b++tmp,a[i])-b;
num[i]=;
}
}
int main(){
int t; scanf("%d",&t);
while (t--){
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++){
scanf("%d",&a[i]);
b[i]=a[i];
}
init();
//离散化
block=sqrt(n);
for (int i=;i<m;i++){
scanf("%d%d",&q[i].l,&q[i].r);
q[i].id=i; q[i].block=q[i].l/block;
q[i].mx=queryMax(q[i].l,q[i].r);
q[i].mi=queryMin(q[i].l,q[i].r);
}
init2();
sort(q,q+m,cmp);
ll=,rr=; cnt=;
for (int i=;i<m;i++){
while (ll<q[i].l) del(ll++);
while (ll>q[i].l) add(--ll);
while (rr<q[i].r) add(++rr);
while (rr>q[i].r) del(rr--);
ans[q[i].id]=calc(q[i]);
}
for (int i=;i<m;i++)
if (ans[i]) printf("YES\n");
else printf("NO\n");
}
return ;
}

hdoj6483

hdoj6483 A Sequence Game(ST预处理RMQ+莫队)的更多相关文章

  1. BZOj 4540: [Hnoi2016]序列 [莫队 st表 预处理]

    4540: [Hnoi2016]序列 题意:询问区间所有子串的最小值的和 不强制在线当然上莫队啦 但是没想出来,因为不知道该维护当前区间的什么信息,维护前后缀最小值的话不好做 想到单调栈求一下,但是对 ...

  2. [hdoj6483][莫队+线段树/ST]

    A Sequence Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  3. BZOJ4540 Hnoi2016 序列 【莫队+RMQ+单调栈预处理】*

    BZOJ4540 Hnoi2016 序列 Description 给定长度为n的序列:a1,a2,-,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,-,ar- ...

  4. BZOJ.4540.[HNOI2016]序列(莫队/前缀和/线段树 单调栈 RMQ)

    BZOJ 洛谷 ST表的一二维顺序一定要改过来. 改了就rank1了哈哈哈哈.自带小常数没办法. \(Description\) 给定长为\(n\)的序列\(A_i\).\(q\)次询问,每次给定\( ...

  5. [bzoj4540][Hnoi2016][序列] (莫队算法+单调栈+st表)

    Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar-1,ar.若1≤l≤s≤t≤r≤n,则称a ...

  6. hdu 5381 The sum of gcd 莫队+预处理

    The sum of gcd Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) P ...

  7. [Bzoj4540][Hnoi2016] 序列(莫队 + ST表 + 单调队列)

    4540: [Hnoi2016]序列 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1567  Solved: 718[Submit][Status] ...

  8. 『序列 莫队 dp预处理』

    序列 Description 给定长度为n的序列:a1,a2,-,an,记为a[1:n]. 类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,-,ar-1,ar.若1≤l≤s≤t≤r≤n ...

  9. ST(RMQ)算法(在线)求LCA

    在此之前,我写过另一篇博客,是倍增(在线)求LCA.有兴趣的同学可以去看一看.概念以及各种暴力就不在这里说了,那篇博客已经有介绍了. 不会ST算法的同学点这里 ST(RMQ)算法在线求LCA 这个算法 ...

随机推荐

  1. Nginx服务器的rewrite、全局变量、重定向和防盗链相关功能

    一:Nginx 后端服务器组的配置: 1.upstream: 用于设置后端服务器组的主要指令,upstream类似于之前的server块或http块,用法如下: upstreame Myserver{ ...

  2. Oracle,cast函数

    cast(要转换的值 AS 转换的类型): 问题:'            ' as FSubBillNo 若用此法 oracle 默认字段类型为char型 且字段长度度为输入空格的长度,会导致字符串 ...

  3. 直接添加viewController中的view时的注意事项

    直接添加viewController中的view时需要注意一个问题,比如: MyTestViewController *vc = [MyTestViewController new]; [self.v ...

  4. 卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)

    分享一些公式计算张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算. 以AlexNet网络为例,以下是该网络的参数结构图. AlexNet网络的层结构如下: 1.Input:       图 ...

  5. PHPMailer出现SMTP connect() failed.

    很可能是端口问题,最好把$mailer->SMTPSecure和$mailer->Port分别设置为ssl与465或者tls与587,否则某些浏览器不接受不安全的链接,导致$mailer- ...

  6. prometheus 表达式

    avg_over_time(my_inprogress_requests{job="mhc"}[5m] offset 3m) 返回time=1550664637开始向前偏移3分钟之 ...

  7. springboot整合zookeeper

    在springboot中所有的整合都是以bean的形式注入对象,从数据库coon.redis conn.再到整合的zookeeper,依然是依照bean注入连接对象,通过zookeeper api对z ...

  8. 团队项目NABCD分析

    1.卡片分类讨论 我们团队在软件工程课上对准备开发的帮你项目进行激烈的讨论后,得出了两个特点. (1)信息检索 (2)主动推送 之所以得出这两个特点,是因为我们作为学生,平常在校园里面有很多专用群和Q ...

  9. SD

    Offer(Tcode:VA23;Table: vbak and vbap) billing(Tcode:VF03;Table:vbrk and vbrp) Offer(quotation)-> ...

  10. node.js中 koa 框架的基本使用方法

    一.安装 koa npm install koa --save 二.简单使用 const koa = require('koa'); //注意使用koa需要new,跟express有点不同 let a ...