题目链接: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. 轻量linux-Crunch bang

    主页地址:http://crunchbang.org crunch bang11昵称 wheezy crunchbang 11 基于 debian7

  2. Origin双坐标轴图表

    1.空白处右键Add New Colume添加新列 2.全选各个列绘制图表 3.添加新的Y轴图层Graph—New Layer—Right-Y 4.右键左上角图层2 –Layer Contents 绑 ...

  3. Android上传头像代码,相机,相册,裁剪

    activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  4. 指针二次释放(_BLOCK_TYPE_IS_VALID)

    [1]_BLOCK_TYPE_IS_VALID是什么错误? (1)最简单的示例代码如下: void main() { ); delete pA; delete pA; } (2)运行后崩溃截图如下: ...

  5. 为 Macbook 安装 wget 命令

    没想到装个这个命令那么麻烦, 还要装 xcode?..... 好吧,按步骤来成功装上 http://www.arefly.com/mac-wget/ 其實Mac也自帶了一個Curl同樣也可以下載網頁, ...

  6. UTF8转码, 考虑利用app转好再传, CC2541转太麻烦了...

  7. 各种数据库连接代码的测试类(java)

    测试类: public class Mytest { Connection conn=null; Statement stmt=null; String myDriver="com.mysq ...

  8. vc获取特殊路径(SpecialFolder)

    %SystemDrive% 操作系统所在的分区号.如 C: %SystemRoot% 操作系统根目录.如 C:\WINDOWS %windir% 操作系统根目录.如 C:\WINDOWS %ALLUS ...

  9. oracle 创建表空间用户

    1.创建普通表空间和用户 //创建临时表空间create temporary tablespace oa_temptempfile 'D:\app\Administrator\oradata\orcl ...

  10. grid