HDU 5289 Assignment [RMQ区间查询+二分搜索]
来源:互联网 发布:常德市优化办内设机构 编辑:程序博客网 时间:2024/05/16 17:22
题干
hdu 5289走你
题解
/***RMQ区间查询+二分搜索**/#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const int INF = 1e9;const int MAX = 100010;int root[MAX];int mpmax[MAX*2][65];int mpmin[MAX*2][65];void RMQ_init(int n){ int m = log(n)/log(2); for(int i=0;i<MAX;i++){ for(int j=0;j<65;j++){ mpmax[i][j] = -INF; mpmin[i][j] = INF; } } for(int i=1;i<=n;i++){ mpmax[i][0] = root[i]; mpmin[i][0] = root[i]; } for(int j=1;j<=m;j++){ for(int i=1;i<=n;i++){ int pos = i + (1 << (j-1)); mpmax[i][j] = max(mpmax[i][j-1],mpmax[pos][j-1]); mpmin[i][j] = min(mpmin[i][j-1],mpmin[pos][j-1]); } }}void query(int l, int r, int& rmax, int& rmin){ int m = log(r-l+1)/log(2) + 1; rmax = max(mpmax[l][m-1],mpmax[r - (1<<(m-1)) + 1][m-1]); rmin = min(mpmin[l][m-1],mpmin[r - (1<<(m-1)) + 1][m-1]);}int main(){ //freopen("in.txt","r",stdin); int t,n; long long k,ans; scanf("%d",&t); while(t--){ scanf("%d%I64d",&n,&k); for(int i = 1; i <= n; i++)scanf("%d",&root[i]); RMQ_init(n); ans = 0; for(int i = 1; i<= n; i++){ int l = i,//二分的左端点 r = n, //二分的有端点 mid = r,//中间点,刚开始mid=(l + r)/2,结果TLE,改成r就AC了,应该是有某个样例专门卡题 //所以写二分的时候还是得尽量让效率更高 max, min, kk; while(l <= mid && mid <= r){ query(l, mid, max, min); kk = max - min; if(kk>=k){ r = mid - 1; mid = (l + r) / 2; }else{ if(mid == r)break; mid = (mid + r) / 2 + (mid + r) % 2; } } ans = ans + r - i + 1; } printf("%I64d\n",ans); } return 0;}
0 0
- HDU 5289 Assignment [RMQ区间查询+二分搜索]
- hdu 5289 Assignment 二分+rmq
- hdu 5289(二分+RMQ) Assignment
- HDU 5289 Assignment【二分+RMQ】
- 【二分+RMQ】hdu 5289 Assignment
- 5289 Assignment (RMQ+二分区间)
- HDU 5289 Assignment (RMQ+二分)
- HDU 5289 Assignment (二分+RMQ)
- Hdu-5289 Assignment (二分+RMQ || 单调队列)
- HDU 5289 Assignment(RMQ+二分)
- hdoj 5289 Assignment 【RMQ + 二分查找区间最优长度】
- HDU 5289 Assignment ST + 二分区间
- hdu 5289 Assignment(RMQ)
- 多校第一场 hdu 5289 Assignment(rmq+二分)
- hdu 5289 Assignment (rmq模版)
- HDU 5289 Assignment (ST算法区间最值+二分)
- HDU 5289 Assignment (二分+区间最值)
- HDOJ 5289 Assignment 【RMQ 二分 || 单调队列】
- java中的CyclicBarrier
- iOS中静态库开发调用函数BUG
- nodejs中express 入门小实例
- DirectX 因素:模拟合成器的仿真
- 深入剖析 OC 中的方法结构 (isa指针的指向,以及元类的概念等)
- HDU 5289 Assignment [RMQ区间查询+二分搜索]
- VMware虚拟机与window共享目录
- 孙鑫Lesson5 text
- 给你一个:驱动程序A,数据源名称为B,用户名称为C,密码为D,数据库表为T,请用JDBC检索出表T的所有数据
- tjut 4635
- TCP的拥塞控制
- excel文件如何转换成pdf的格式
- 设计模式
- 338. Counting Bits [medium] (Python)