hdu 5289 Assignment(ST表+双指针)
来源:互联网 发布:常州科教城淘宝装修 编辑:程序博客网 时间:2024/06/06 08:55
题意:
给一个整数序列,多达10万个。问:有多少个区间满足“区间最大元素与最小元素之差不超过k“
解析:
如果用穷举法,有
O(n2) 复杂度,这肯定是不可取的。
所以可以用ST算法先预处理每个区间最大和最小值,O(nlog(n)) 。
注意一个区间固定起点,延长终点,那么这个区间的最大值和最小值的差肯定是单调递增的。
所以这题用双指针的方法,枚举右指针rp ,用左指针lp 向前移动,求出满足rmq(lp,rp)<k ,且lp 和rp 最大的区间,统计ans+=(rp−lp+1) 。因为在[lp,rp] 这个区间是满足要求的,那么以rp 为结尾的,[lp,rp] 、[lp+1,rp] …[rp−1,rp] 、[rp,rp] 就都是满足要求的,刚好(rp−lp+1) 个。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef __int64 ll;const int N = 100005;int A[N];int n, K;int maxv[N*2][20], minv[N*2][20];void rmq_init() { for(int i = 1; i <= n; i++) { maxv[i][0] = minv[i][0] = A[i]; } for(int j = 1; (1<<j) <= n; j++) { for(int i = 1; i + (1<<j) - 1 <= n; i++) { maxv[i][j] = max(maxv[i][j-1], maxv[i + (1<<(j-1))][j-1]); minv[i][j] = min(minv[i][j-1], minv[i + (1<<(j-1))][j-1]); } }}int rmq(int L, int R) { int len = R - L + 1, k = 0; while(1 << (k+1) <= len) k++; int Max = max(maxv[L][k], maxv[R-(1<<k)+1][k]); int Min = min(minv[L][k], minv[R-(1<<k)+1][k]); return Max - Min;}int main() { int T; scanf("%d", &T); while(T--) { scanf("%d%d", &n, &K); for(int i = 1; i <= n; i++) { scanf("%d", &A[i]); } rmq_init(); int lp = 1; ll ans = 0; for(int rp = 1; rp <= n; rp++) { while(rmq(lp, rp) >= K && lp < rp) lp++; ans += (rp - lp + 1); } printf("%I64d\n", ans); } return 0;}
0 0
- hdu 5289 Assignment(ST表+双指针)
- hdu 5289 Assignment 【ST算法】
- HDU 5289 Assignment【ST+二分】
- HDU 5289 Assignment (ST算法区间最值+二分)
- HDU 5289 Assignment (RMQ——ST算法)
- HDU 5289 Assignment ST + 二分区间
- HDU5289:Assignment(二分 + ST表)
- hdu 5289 ST表+双指针或者优先队列或者multiset
- hdu 5289 Assignment(数学)
- [two-pointer ST表] HDU5289: Assignment
- HDU 5289 Assignment (RMQ+二分)
- HDU 5289 Assignment(尺取法)
- HDU 5289 Assignment (二分+RMQ)
- HDU 5289 Assignment(RMQ+二分)
- HDU 5289 Assignment (线段树)
- hdu 5289 Assignment
- HDU 5289 Assignment
- hdu 5289 Assignment
- 图片自动父元素小大
- Linux的网络协议中的网卡缓冲区
- 直接拿来用!十大Material Design开源项目
- android自动连接到指定wifi
- python 不是内部或外部命令
- hdu 5289 Assignment(ST表+双指针)
- tiptop文本框实时监测输入的内容
- Constraint.constant动画效果
- 提高工作效率的16条Android开发小经验
- Git添加多个ssh密钥
- UIlabel添加背景图片
- linux Device Drivers platform
- html格式
- hdu5288 多校