题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289

题意:求满足区间内最大值和最小值差为k的区间个数。

预处理出区间的最值,枚举左端点,根据最值的单调性二分枚举右端点,使得找到最右侧max-min<k,区间数为[i,...hi]的个数,即hi-i+1个。

 #include <bits/stdc++.h>
using namespace std; typedef long long LL;
typedef pair<int, int> pii;
const int maxn = ;
int dp[maxn][][];
int a[maxn];
int n, k; void st(int* a, int* b, int n) {
for(int i = ; i <= n; i++) dp[i][][] = b[i], dp[i][][] = a[i];
for(int j = ; ( << j) - <= n; j++) {
for(int i = ; i + ( << j) - <= n; i++) {
dp[i][j][] = min(dp[i][j-][], dp[i+(<<(j-))][j-][]);
dp[i][j][] = max(dp[i][j-][], dp[i+(<<(j-))][j-][]);
}
}
} pii query(int l, int r) {
int k = int(log(r-l+) / log(2.0));
return pii(min(dp[l][k][], dp[r-(<<k)+][k][]), max(dp[l][k][], dp[r-(<<k)+][k][]));
} int main() {
// freopen("in", "r", stdin);
int T;
scanf("%d", &T);
while(T--) {
scanf("%d%d",&n,&k);
for(int i = ; i <= n; i++) scanf("%d", &a[i]);
st(a, a, n);
LL ret = ;
for(int i = ; i <= n; i++) {
int lo = i, hi = n;
while(lo <= hi) {
int mid = (lo + hi) >> ;
pii q = query(i, mid);
int minn = q.first, maxx = q.second;
if(maxx - minn < k) lo = mid + ;
else hi = mid - ;
}
ret += (hi - i + );
}
printf("%I64d\n", ret);
}
return ;
}

[HDOJ5289]Assignment(RMQ,二分)的更多相关文章

  1. HDU - 5289 Assignment (RMQ+二分)(单调队列)

    题目链接: Assignment  题意: 给出一个数列,问其中存在多少连续子序列,使得子序列的最大值-最小值<k. 题解: RMQ先处理出每个区间的最大值和最小值(复杂度为:n×logn),相 ...

  2. hdoj5289【RMQ+二分】【未完待续】

    思路: 对当前值查找最近满足位置: 利用RMQ求出区间最大最小值,再枚举右端点,二分区间找到满足要求的最大区间累加

  3. HDU 5089 Assignment(rmq+二分 或 单调队列)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  4. hdu 5289 Assignment(2015多校第一场第2题)RMQ+二分(或者multiset模拟过程)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意:给你n个数和k,求有多少的区间使得区间内部任意两个数的差值小于k,输出符合要求的区间个数 ...

  5. *HDU3486 RMQ+二分

    Interviewe Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  6. hdu 3486 Interviewe (RMQ+二分)

    Interviewe Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  7. 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...

  8. 玲珑杯 Round 19 B Buildings (RMQ + 二分)

    DESCRIPTION There are nn buildings lined up, and the height of the ii-th house is hihi. An inteval [ ...

  9. HDU - 5289:Assignment(单调队列||二分+RMQ||二分+线段树)

    Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n in this com ...

随机推荐

  1. 【py网页】urlopen的补充,完美

    urllib 是 python 自带的一个抓取网页信息一个接口,他最主要的方法是 urlopen(),是基于 python 的 open() 方法的.下面是主要说明: 1 urllib.urlopen ...

  2. Visual studio 中编译错误SQL71006: Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.

    把写好的sql脚本,并在mssqlmanager里面编译成功的存储过程脚本复制到vs项目下,出现错误信息如下:SQL71006: Only one statement is allowed per b ...

  3. 设置Tab键为四个空格

    https://my.oschina.net/xunxun10/blog/110074

  4. JSP页面显示乱码

    下面的显示页面(display.jsp)就出现乱码: <html> <head> <title>JSP的中文处理</title> <meta ht ...

  5. laravel5.1启动详解

    laravel的启动过程 如果没有使用过类似Yii之类的框架,直接去看laravel,会有点一脸迷糊的感觉,起码我是这样的.laravel的启动过程,也是laravel的核心,对这个过程有一个了解,有 ...

  6. LoadRunner并发用户和集合点的深入讨论

    看到51上三个高手Zee, 大漠飞鹰,xingcyx的一场非常精彩的关于并发用户数和集合点的讨论,很有意义.如果对这两个概念不清楚的朋友,一定要仔细领悟了. 故事开始于xingcyx的一番话: 声明: ...

  7. Linux安装JDK、MyEclipse、MySql

    一.将下载好的 jdk-7u79-linux-x64.tar.gz 复制到要安装的目录 /usr/lib/jdk (注:jdk文件夹自己创建 sudo mkdir jdk)二.进入到目录 /usr/l ...

  8. win7无法通过DHCP获得IP地址

    问题:win7无法通过DHCP获得IP地址(手动设置没有问题),但XP可以自动获取. 前些时候,某局域网反应部分WIN7系统无法正常从DHCP服务器(windows dhcp 服务器)获取ip地址,交 ...

  9. centos查看磁盘扇区大小等信息

    fdisk -l 说明一下: “Disk /dev/sda: 53.7 GB, 53687091200 bytes” 表示第一块磁盘的大小为53.7GB. "255 heads"表 ...

  10. JavaEE基础(十一)/Eclipse介绍

    1.Java开发工具(常见开发工具介绍) A:操作系统自带的记事本软件 B:高级记事本软件 C:集成开发环境 IDE (Integrated Development Environment) D:Ec ...