hdu5726-GCD-ST表+二分
先用st表处理出所有l-r的GCD值,然后二分求得这些值一共出现了多少次。
1 #include<bits/stdc++.h> 2 3 #define inf 0x3f3f3f3f 4 5 const int maxn=100000; 6 7 using namespace std; 8 9 typedef pair<int,int> P; 10 11 int l,r; 12 13 int icase; 14 15 int t,n,q; 16 17 int a[maxn+1]; 18 19 int dp[maxn+1][20]; 20 21 map<int,long long> m; 22 23 int gcd(int a,int b){ 24 return b==0?a:gcd(b,a%b); 25 } 26 27 void RMQ(){ 28 for(int i=1;i<=n;i++){ 29 dp[i][0]=a[i]; 30 } 31 for(int j=1;j<20;j++){ 32 for(int i=1;i<=n;i++){ 33 if(i+((1<<(j-1))-1)<=n) 34 dp[i][j]=gcd(dp[i][j-1],dp[i+(1<<(j-1))][j-1]); 35 //printf("%d\n",dp[i][j]); 36 } 37 } 38 } 39 40 int query(int l,int r){ 41 int k=(int)log2(double(r-l+1)); 42 return gcd(dp[l][k],dp[r-(1<<k)+1][k]); 43 } 44 45 void Cal(){ 46 for(int i=1;i<=n;i++){ 47 int GCD=a[i],tail=i; 48 while(tail<=n){ 49 int lb=tail,ub=n,mid=(lb+ub)>>1; 50 while(ub-lb>1){ 51 mid=(lb+ub)>>1; 52 if(query(i,mid)==GCD) lb=mid; 53 else ub=mid; 54 } 55 if(query(i,ub)==GCD){ 56 m[GCD]+=(ub-tail+1); 57 tail=ub+1; 58 GCD=query(i,tail); 59 } else if(query(i,mid)==GCD){ 60 m[GCD]+=(mid-tail+1); 61 tail=mid+1; 62 GCD=query(i,tail); 63 } 64 else{ 65 m[GCD]+=(lb-tail+1); 66 tail=lb+1; 67 GCD=query(i,tail); 68 } 69 } 70 } 71 } 72 73 void solve(){ 74 scanf("%d",&n); 75 for(int i=1;i<=n;i++){ 76 scanf("%d",&a[i]); 77 } 78 RMQ(); 79 Cal(); 80 scanf("%d",&q); 81 printf("Case #%d:\n",++icase); 82 while(q--){ 83 scanf("%d%d",&l,&r); 84 int res=query(l,r); 85 printf("%d %I64d\n",res,m[res]); 86 } 87 } 88 89 void init(){ 90 m.clear(); 91 memset(dp,0,sizeof(dp)); 92 } 93 94 int main() 95 { 96 scanf("%d",&t); 97 while(t--){ 98 init(); 99 solve(); 100 } 101 return 0; 102 }
转载于:https://www.cnblogs.com/GeniusYang/p/5769572.html
hdu5726-GCD-ST表+二分相关推荐
- 后缀数组 ---- 2018~2019icpc焦作H题[后缀数组+st表+二分+单调栈]
题目链接 题目大意: 给出nnn个数,定义f[l,r]f[l,r]f[l,r]表示 区间[l,r][l,r][l,r]的最大值,求所有 子区间的最大值的和,要求相同的子区间只能算一次 比如数列 5 6 ...
- 洛谷P4501/loj#2529 [ZJOI2018]胖(ST表+二分)
题面 传送门(loj) 传送门(洛谷) 题解 我们对于每一个与宫殿相连的点,分别计算它会作为多少个点的最短路的起点 若该点为\(u\),对于某个点\(p\)来说,如果\(d=|p-u|\),且在\([ ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- luoguP5108 仰望半月的夜空 [官方?]题解 后缀数组 / 后缀树 / 后缀自动机 + 线段树 / st表 + 二分...
仰望半月的夜空 题解 可以的话,支持一下原作吧... 这道题数据很弱..... 因此各种乱搞估计都是能过的.... 算法一 暴力长度然后判断判断,复杂度\(O(n^3)\) 期望得分15分 算法二 通 ...
- HDU5726 GCD(rmq+二分)
这道题是2016第一场多校的1004,趁机优化了一发 题意:10W长度的数组,10W个询问,让你回答任意两点间的gcd和全局相同gcd的数量 思路:用由于gcd一段固定以后具有单调性的,用rmq nl ...
- CodeForces - 1547F Array Stabilization (GCD version)(ST表+二分)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数组 aaa,下标从 000 开始,每次操作分为两个步骤: 构建出数组 bbb,有 bi=gcd(ai,a(i+1)modn)b_i=gcd(a ...
- 2016 Multi-University Training Contest 1 1004 GCD(ST表+二分)
GCD 注意观察gcd(al,al+1,...,ar)\gcd(a_{l},a_{l+1},...,a_{r})gcd(al,al+1,...,ar),当lll固定不动的时候,r=l...nr ...
- P3564 [POI2014]BAR-Salad Bar(ST表 + 二分)
P3564 [POI2014]BAR-Salad Bar 给定一个长度为nnn的数组,里面元素只有111跟−1-1−1,问选出一个长度为lenlenlen的区间使得,这个区间的前缀和时刻大于零,后缀和 ...
- Codeforces 359D Pair of Numbers | 二分+ST表+gcd
题面: 给一个序列,求最长的合法区间,合法被定义为这个序列的gcd=区间最小值 输出最长合法区间个数,r-l长度 接下来输出每个合法区间的左端点 题解: 由于区间gcd满足单调性,所以我们可以二分区间 ...
- B. Integers Have Friends(cf)二分 + st表
原题链接:Problem - 1548B - Codeforces 解决RMQ(区间最值)问题的算法. 总结的来说求rmq问题有多种方法:线段树,ST表等 线段树预处理O(nlogn),查询O(log ...
最新文章
- JS数组去重之利用set数据结构去重
- svnserve.conf: Option expected的问题解决方法
- python如何改变数据类型_如何改变numpy数组的数据类型和形状?
- nginx子目录301重定向到其他域名URL
- 类加载器ClassLoader
- ROS kinetic + Ubuntu16.04编译LSD-SLAM
- 谷粒商城:02. 数据库初始化以及SQL语句
- 列举计算机组装所需的各个硬件,计算机组装和维修期中考试.doc
- 计算机组成原理(白中英) 第一章课后题部分答案(知识点汇总及扩展)
- 计算机二级excel高级筛选,Excel高级筛选怎么用之相关案例:excel高级筛选多个条件(并且、或用法)...
- ET代理_切换ip软件网络功能。
- 《Adobe Photoshop CS5中文版经典教程(全彩版)》—第2课2.3节概述
- uni-app新闻小程序
- 又有2名博士入选华为“天才少年”!学霸日常科研计划表曝光
- 机器学习中特征选择概述
- 数据库工程师考点2023
- 2022年嵌入式开发就业前景怎么样?
- 配置微型计算机实验报告,微型计算机原理实验报告.docx
- Fiddler使用 抓取手机数据包及中文乱码解决方案
- 快手客户端开发面试(一二三+HR面)
热门文章
- Java面试宝典————基础篇
- 优秀ppt作品范例_首次公开|锐普的内部PPT配色库
- python内存管理机制_python内存管理机制
- sata接口 图解 定义_SATA协议简介
- 温度 数值模拟 matlab,西安交通大学——温度场数值模拟(matlab)
- php class使用方法,PHP调试类Krumo使用教程
- r语言怎么保存代码_R代码忘记保存,系统崩溃了怎么办?
- HTML+CSS+JS实现 ❤️h5酷炫的天体木星动画特效❤️
- 《零基础》MySQL 安装(二)
- javascript 唯一值的集合 Set对象