博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
B - Assignment HDU - 5289-RMQ
阅读量:2352 次
发布时间:2019-05-10

本文共 1440 字,大约阅读时间需要 4 分钟。

 RMQ + 二分

#include
#include
#include
#include
#include
#include
using namespace std;const int MAXN = 100000;const int MAXE = 25;//const int MAX = 30;int n;int m;int h[MAXN];//int bin[MAX];//int Log[MAXN]int mmax[MAXN][MAXE];int mmin[MAXN][MAXE];void RMQ_ST(){ for(int i = 1; i <= n; i++) { mmax[i][0] = h[i]; mmin[i][0] = h[i]; } int end_j = log(n + 0.0) / log(2.0); int end_i; for(int j = 1; j <= end_j; j++) { end_i = n + 1 - (1 << j); for(int i = 1; i <= end_i; i++) { mmax[i][j] = max(mmax[i][j - 1], mmax[i + (1 << (j - 1))][j - 1]); mmin[i][j] = min(mmin[i][j - 1], mmin[i + ( 1 << (j - 1))][j -1]); } }}int QueryMax(int l, int r){ int k = log(r - l + 1.0) / log(2.0); int x = max(mmax[l][k], mmax[r - (1 << k) + 1][k]); int y = min(mmin[l][k], mmin[r - (1 << k) + 1][k]); return x - y;}//int QueryMin(int l, int r)//{// int k = log(r - l + 1.0) / log(2.0);// return min(mmin[l][k], mmin[r - (1 << k) + 1][k]);//}int main(){ int T; cin >> T; while(T--) { int k; cin >> n >> k; for(int i = 1; i <= n; i++) { cin >> h[i]; } RMQ_ST(); int l,r;// cin >> m;// for(int i = 1; i <= m; i++)// {// cin >> l >> r;// cout << QueryMax(l,r) << endl;// } long long int ans = 0; for(int i = 1; i <= n; i++) { l = i; r = n; while(l <= r) { int mid = (l + r) / 2; int cha = QueryMax(i,mid); if(cha < k) { l = mid + 1; } else r = mid - 1; } ans += l - i; } cout << ans << endl; } return 0;}

 

转载地址:http://vnwtb.baihongyu.com/

你可能感兴趣的文章
Electron通过ffi调用DLL
查看>>
Node.js & Electron的扩展模块
查看>>
Mysql semi-sync VS group replication, 谁快?
查看>>
Android Looper Message MessageQueue Handler
查看>>
Win10下安装卸载Oracle11g的教程及各种坑
查看>>
更新mysql5.7修改字符集
查看>>
Windows系统护眼色设置
查看>>
JUC多线程&lambda之美&ThreadLocal
查看>>
碎片清理
查看>>
程序员不能错过的技术网站
查看>>
冒泡排序(分析+代码调优)
查看>>
Vue
查看>>
乐优商城总结
查看>>
如何使用Git上传和更新项目至Github
查看>>
选择排序(分析+代码调优)
查看>>
Docker
查看>>
代码优化建议,44条代码优化细节
查看>>
快速排序(图解分析+代码调优)
查看>>
Java基础面试总结
查看>>
HashMap遍历几种方式比较(传统的Map迭代方式对比JDK8的迭代方式)
查看>>