HDU5289 Assignment
来源:互联网 发布:淘宝优惠券那个网站好 编辑:程序博客网 时间:2024/05/22 05:25
题目大意:问数组a中,区间[i,j]中最大值和最小值之差不超过k,问这样的区间有多少个。
思路:预处理出区间[i,j]中的最大值最小值(这里用的是ST算法,也有用线段树的),然后枚举左端点l,二分出符合条件的右端点r,以l为左端点,j为右端点(l<=j<=r)的符合条件的集合为(r-l+1)。
#define _CRT_SECURE_NO_DEPRECATE#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<ctime>#define N 100005#define LL long long #define mod 1000000007#define esp 1e-6#define y1 y1234#define INF 0x3f3f3f3f#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define maxn 200005const double PI = acos(-1.0);using namespace std;int a[N];int mx[N][21], mi[N][21];int n, k;void RMQ(){for (int j = 1; (1<<j) <= n; j++){for (int i = 1; i + (1<<j)-1 <= n; i++){int p = 1 << (j - 1);mx[i][j] = max(mx[i][j - 1], mx[i + p][j - 1]);mi[i][j] = min(mi[i][j - 1], mi[i + p][j - 1]);}}}int q(int i, int j){int k = log2(j - i + 1.0);int mma = max(mx[i][k], mx[j - (1 << k) + 1][k]);int mmi = min(mi[i][k], mi[j - (1 << k) + 1][k]);return mma - mmi;}int main(){int t;cin >> t;while (t--){cin >> n >> k;for (int i = 1; i <= n; i++){scanf("%d", &a[i]);mx[i][0] = mi[i][0] = a[i];}RMQ();LL ans = 0;for (int i = 1; i <= n; i++){int l = i, r = n;while (l + 1 < r){int m = (l + r) >> 1;if (q(i, m) < k)l = m;else r = m;}if (q(i, r) < k)ans += (r * 1LL - i + 1);else ans += (l * 1LL - i + 1);}cout << ans << endl;}return 0;}
0 0
- HDU5289 Assignment
- hdu5289 Assignment
- hdu5289 Assignment
- hdu5289 Assignment
- HDU5289 Assignment
- RMQ+二分 hdu5289 Assignment
- 搜索 - hdu5289 Assignment
- HDU5289(2015多校1)--Assignment
- 解题报告 之 HDU5289 Assignment
- HDU5289 Assignment RMQ / 单调队列
- HDU5289.Assignment(多校第二题)
- HDU5289:Assignment(二分 + ST表)
- [two-pointer ST表] HDU5289: Assignment
- HDU5289
- HDU5289
- hdu5289(2015多校1)--Assignment(单调队列)
- hdu5289 Assignment (区间查询最大值最小值,st算法...)
- hdu5289 2015多校联合第一场1002 Assignment
- Objective-C学习笔记(二)——OC基本语法概述
- android 卡片式视图组件 cardview的使用
- Activity的启动模式
- WERTYU
- 使用GPIO模拟I2C总线进行通信
- HDU5289 Assignment
- linux ubuntu14.0.4中配置Apache tomcat的方法
- ffmpeg filter参数设置格式
- 算法导论-最大子数组问题-线性时间复杂度算法分析与实现
- Adaboost 算法的原理与推导
- 排列(c++ stl+哈希)
- Android 四大组件学习之Service五
- 如何提高并发度?读写锁,分拆锁、分离锁,ThreadLocal,copyOnWrite,工作队列 per thread, 工作窃取
- UVA 12563 Jin Ge Jin Que Hao