hdoj6483 A Sequence Game(ST预处理RMQ+莫队)
传送: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+莫队)的更多相关文章
- BZOj 4540: [Hnoi2016]序列 [莫队 st表 预处理]
4540: [Hnoi2016]序列 题意:询问区间所有子串的最小值的和 不强制在线当然上莫队啦 但是没想出来,因为不知道该维护当前区间的什么信息,维护前后缀最小值的话不好做 想到单调栈求一下,但是对 ...
- [hdoj6483][莫队+线段树/ST]
A Sequence Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- BZOJ4540 Hnoi2016 序列 【莫队+RMQ+单调栈预处理】*
BZOJ4540 Hnoi2016 序列 Description 给定长度为n的序列:a1,a2,-,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,-,ar- ...
- BZOJ.4540.[HNOI2016]序列(莫队/前缀和/线段树 单调栈 RMQ)
BZOJ 洛谷 ST表的一二维顺序一定要改过来. 改了就rank1了哈哈哈哈.自带小常数没办法. \(Description\) 给定长为\(n\)的序列\(A_i\).\(q\)次询问,每次给定\( ...
- [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 ...
- 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 ...
- [Bzoj4540][Hnoi2016] 序列(莫队 + ST表 + 单调队列)
4540: [Hnoi2016]序列 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1567 Solved: 718[Submit][Status] ...
- 『序列 莫队 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 ...
- ST(RMQ)算法(在线)求LCA
在此之前,我写过另一篇博客,是倍增(在线)求LCA.有兴趣的同学可以去看一看.概念以及各种暴力就不在这里说了,那篇博客已经有介绍了. 不会ST算法的同学点这里 ST(RMQ)算法在线求LCA 这个算法 ...
随机推荐
- Sql Server数据库之四个增删改查
一.数据库的增删改查 1.新建数据库 create database students on primary ( name="students_data",--主数据文件的逻辑名 ...
- asp.net文件/大文件上传需要配置的项目整理
HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求. 最可能的原因: •Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值. 可尝 ...
- 外网访问Vmware虚拟机中的某个服务(如http)
如果主机是windowx NAT中隐藏的端口映射,说明一下环境,利用当然是VMnet8网络连接,在虚拟机中架设linux WEB服务器利用WEB默认80端口,IP为192.168.11.10,真实主机 ...
- python--第十天总结(IO多路复用)
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking IO):默认创建的s ...
- AngularJS学习笔记(二)
一.AngularJS Select(选择框) 1.使用 ng-options 创建选择框 <div ng-app="myApp" ng-controller="m ...
- [leetcode]364. Nested List Weight Sum II嵌套列表加权和II
Given a nested list of integers, return the sum of all integers in the list weighted by their depth. ...
- 初始Spring mvc
转自:http://elf8848.iteye.com/blog/875830很棒的一篇博客,想了解SpringMvc的入门选手可以去看看. 一,核心类与接口: DispatcherServlet - ...
- KD-树(上)
来自于https://zhuanlan.zhihu.com/p/23966698 思路篇 导语:kd 树是一种二叉树数据结构,可以用来进行高效的 kNN 计算.kd 树算法偏于复杂,本篇将先介绍以二叉 ...
- js--获得当前系统时间
window.onload = function () { var oBody = document.body; setInterval( fnTime, 1000 ); fnTime (); fun ...
- iPhone屏幕分辨率和适配规则 图片文字适配
基本概念 - 逻辑分辨率 pt (point),物理分辨率 px (pixel) - 缩放因子 scale 或者 dpr, scale ≈ px / pt - 缩放采样 例如 iPhone 6 Plu ...