hdu5875 二分加st
来源:互联网 发布:工信部大数据认证考试 编辑:程序博客网 时间:2024/05/08 23:56
题意:给你一个n,n个数
m个询问,每次询问你 l,r,, a[l] % a[l+1] % a[l+2] %……a[r] 结果是多少
思路:
每次有效的取模会使结果减半,因此只有log次有效取模,每次往右找一个不大于结果的最靠左的数,ST表+二分
注意RMQ查询的时候少用 log函数,容易超时,
st解法:http://blog.csdn.net/aitangyong/article/details/26940155
还有二分的正确姿势
#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 10;int a[maxn]; int dp[maxn][50]; int n;void st(){ // 类似于区间dp一样, 第一维是长度, 然后是起始坐标, 按段去更新 for(int j = 1; (1 << j) <= n; j ++){ for(int i = 1; i + (1 << j) - 1 <= n; i++){ // 因为算的是从i开始长度为2^j的区间, 所以下标要减1 dp[i][j] = min(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]); } }}int query(int l, int r){ int len = (r - l + 1); int k = 0 ; while((1 << (k + 1)) <= len) k ++;// 覆盖全部区间 的最小k值 return min(dp[l][k], dp[r - (1 << k) + 1][k]); // 算出右端点正好是r往左数2^k个数 } int binary_search(int l ,int r, int res){ int now = a[l]; int s = r + 1; while(l <= r){ int mid = (l + r) / 2; if(query(l, mid) <= res){ s = mid; r = mid - 1; } else l = mid + 1; } return s;}int main(){ int t ; cin >> t; while(t --){ scanf("%d", &n); for(int i = 1 ; i <= n ; i++){ scanf("%d", &a[i]); dp[i][0] = a[i]; } st(); int m ; scanf("%d", &m); while(m --){ int l, r; scanf("%d%d", &l, &r); int res;res = a[l]; l ++; while(l <= r && res){ l = binary_search(l ,r, res); if(l <= r){ res %= a[l] ;l ++; } } printf("%d\n", res); } }}
0 0
- hdu5875 二分加st
- HDU5875-Function(RMQ + 二分)
- hdu5875(取模的性质,线段树,二分)
- HDU 5289 Assignment【ST+二分】
- HDU 5875 二分+st表
- hdu 5875 Function ST+二分
- hdu5726 GCD st表 + 二分
- hdu5875 Function
- HDU5875-Function
- hdu5875 Function
- codeforces 475D CGCDSSQ ST表+二分
- poj 2796 st算法+二分 / 单调栈
- HDU 5726 GCD(ST+二分)
- hdu 5726 GCD (二分+ST表)★
- HDOJ 5726 GCD 二分+ST表
- codeforces689D Friends and Subsequences 二分+ST表
- HDU 5875 Function ST + 二分区间
- HDU 5289 Assignment ST + 二分区间
- 实现虚拟机上CentOS 7网络外部通信
- 责任链模式——学生请假
- hdu 3480 Division (四边形不等式优化DP)
- 不可变类
- Linux线程(pthread)学习笔记
- hdu5875 二分加st
- 可执行"宏替换"的final变量
- Linux下分卷解压
- 反转链表
- 利用jsoup和httpclient来进行网站的爬取
- Java产生死锁的一个简单例子
- Java中final方法的几条规则
- 融云SDK:获取用户Token的方法
- 测试用户名称大全