HDU 5875 Function ST + 二分区间
来源:互联网 发布:dell网络驱动如何安装 编辑:程序博客网 时间:2024/05/19 18:14
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5875
代码:
#include <bits/stdc++.h>#define sf scanf#define pf printfusing namespace std;const int maxn = 100000 + 5;int MIN[maxn][32];int n;void INIT_RMQ(){ for(int j = 1;(1 << j) <= n;++j){ for(int i = 1;(i + (1 << j) - 1)<= n;++i){ MIN[i][j] = min(MIN[i][j - 1],MIN[i + (1 << (j - 1))][j - 1]); } }}int RMQ(int l,int r){ int LEN = r - l + 1; int k = 0; while ((1 << (k + 1)) <= LEN) k++; return min(MIN[l][k], MIN[r - (1 << k) + 1][k]);}int main(){ int T,q,l,r,value;sf("%d",&T); while( T-- ){ sf("%d",&n); for(int i = 1;i <= n;++i) sf("%d",&MIN[i][0]); INIT_RMQ(); sf("%d",&q); while(q--){ sf("%d %d",&l,&r); value = MIN[l++][0]; while(l <= r){ int L = l,R = r; while(L < R){ if(RMQ(L,L + R >> 1) <= value){ R = L + R >> 1; } else if(RMQ((L + R >> 1) + 1,R) <= value){ L = (L + R >> 1) + 1; } else break; } if(MIN[L][0] > value) break; else value %= MIN[L][0]; if(value == 0) break; l = L + 1; } pf("%d\n",value); } }}
0 0
- HDU 5875 Function ST + 二分区间
- hdu 5875 Function ST+二分
- hdu 5875 Function (st+二分)
- hdu 5875(ST&&二分区间)
- HDU 5875 Function 线段树 || (ST表 + 二分)
- HDU 5875 Function (ST表+二分 or 线段树)
- HDU 5289 Assignment ST + 二分区间
- HDU 5875 二分+st表
- HDU 5289 Assignment (ST算法区间最值+二分)
- Hdu-5875 Function(树上倍增st算法)
- HDU 5875 Function(二分区间+RMQ)——2016 ACM/ICPC Asia Regional Dalian Online
- hdu 5875 Function 二分+rmq
- HDU 5875 Function (RMQ+二分)
- rmq-st算法<区间最大最小>(hdu 5875)
- HDU 5289 Assignment【ST+二分】
- hdu 5875 Function(二分RMQ)
- HDU 5726 GCD(ST+二分)
- hdu 5726 GCD (二分+ST表)★
- C#控制台基础 file.readalltext使用相对路径与绝对路径去读取 与exe在同一目录下的txt文件
- Python基础-sort()函数
- 深入浅出Spring task定时任务
- 如何优化网页加载速度
- Java-NowCoder-进制转换
- HDU 5875 Function ST + 二分区间
- Hibernate 乐观锁实现之 Version
- linux下 安装 oracle11g 错误 Can't open display: xxx
- 平衡二叉树(AVL)
- leetcode【121+122+123 best time to buy and sell stock】【python】
- Get和Post请求
- openstack安装问题
- Ubuntu+Apache+PHP+Mysql环境搭建(完整版)
- G1 垃圾回收