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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux桌面环境是什么意思,Linux 黑话解释:什么是桌面环境?

在桌面 Linux 世界中&#xff0c;最常用的术语之一就是 桌面环境(Desktop Environment)(DE)。如果你是 Linux 的新手&#xff0c;你应该了解一下这个经常使用的术语。什么是 Linux 中的桌面环境?桌面环境是一个组件的组合体&#xff0c;为你提供常见的 图形用户界面(graphical…

redhat linux 安装ftp服务,RedHat Linux 9.0为例介绍一下如何安装和配置vsftpd服务器

本文以RedHat Linux 9.0为例介绍一下如何安装和配置vsftpd服务器。安装服务器程序程序下载地址&#xff1a;&#xff0c;目前最新版本为2.0.3&#xff0c;源程序文件名为vsftpd-2.0.3.tar.gz。1&#xff0e;安装之前的准备&#xff1a;安装之前我们应该看看用户“nobody”和目录…

Hadoop 2.5.1集群安装配置

本文的安装只涉及了hadoop-common、hadoop-hdfs、hadoop-mapreduce和hadoop-yarn&#xff0c;并不包含HBase、Hive和Pig等。 http://blog.csdn.net/aquester/article/details/24621005 1. 规划 1.1. 机器列表 NameNode SecondaryNameNode DataNodes 172.16.0.100 172.16.0.…

linux杀掉进程后总是重启,Linux监控进程,进程关闭自动重启方案

Linux监控进程&#xff0c;进程关闭自动重启方案corntabshell脚本检测进程这个方案简单不用额外安装软件。缺点是存在间隔&#xff0c;corntab设置1秒执行一次shell脚本也是存在间隔的#!/bin/bash#author smallForest#email 1032817724qq.comproc_name"xiaofei.php" …

C语言atan2()函数:求y/x的反正切值

头文件&#xff1a;#include <math.h>atan2() 函数用于求 y / x 的反正切值。其原型为&#xff1a; double atan2(double y, double x);【参数】x为坐标的X轴值&#xff0c;y为坐标的Y轴值。如果 x 和 y 的值都为 0&#xff0c;将会导致错误。atan2() 求坐标 x 和 y 的…

Linux qt程序打包依赖库,Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)...

本文介绍如何打包Qt程序&#xff0c;使其在没有安装Qt的系统可以运行。默认前提&#xff1a;另外一个系统和本系统是同一个系统版本。1&#xff0c;编写导出依赖包的脚本copylib.sh#!/bin/bashLibDir$PWD"/lib"Target$1lib_array($(ldd $Target | grep -o "/.*&…

ubuntu14.04 x86编译upx 3.92 及so加固

的参考文章&#xff1a; http://www.cnblogs.com/fishou/p/4202061.html 1.download upx和所依赖的组件 upx3.92&#xff1a;https://www.pysol.org:4443/hg/upx.hg/archive/tip.tar.gzLZMA4.43&#xff1a;http://nchc.dl.sourceforge.net/project/sevenzip/LZMA%20SDK/4.43/l…

linux磁盘分区面试题,一套Linux面试模拟题及答案

一、填空题1、查找在当前目录中文件属主具有读、写权限&#xff0c;并且文件所属组的用户和其他用户具有读权限的文件&#xff0c;使用的命令是( find . -perm 644 )&#xff1b;查找在/tmp目录中&#xff0c;属主是benet用户的文件( find /tmp –user benet)&#xff1b;删除当…

jQuery中的渐变动画效果

jQuery中的渐变动画效果jQuery中的渐变动画效果转载于:https://www.cnblogs.com/DreamDrive/p/5780292.html

linux vi编辑器 Ctrl s,Linux命令-----vi/vim编辑器

也可建立vi到vim的符号连接(即实际调用的是vim)# mv /bin/vi /bin/vi.bak# ln -s /usr/bin/vim /bin/vi进入vi的命令&#xff1a;vi 直接进入编辑并创建新文件vi filename 编辑文件(不存在则创建文件)&#xff0c;并将光标置于第一行首vi n filename 打开文件&#xff0c;并…

insert sort

插入排序将数据分为前面有序部分和后面无序部分,取无序部分的第一个元素插入到有序序列中.注意与选择排序的区别. // insert sortvoid insertionSort(int arr[], int length) {int i, j, tmp;for (i 1; i < length; i) {j i;while (j > 0 && arr[j 1] > ar…

关闭linux系统中读写页缓存,Linux文件系统FAQ

Linux文件系统FAQ2010年03月25日最近实验室搞了一些列讲座&#xff0c;阿福师兄关于文件系统的讲座帮我弄清楚了一些以前不清楚的问题&#xff0c;以问答的形式对文件系统常见的问题进行了总结。Q: 文件系统如何看待底层物理块设备&#xff1f;文件系统把块设备简单的看做线性的…

《JS权威指南学习总结--6.1原型》

内容要点&#xff1a; 一.每一个JS对象&#xff08;null除外&#xff09;都和另一个对象相关联。"另一个"对象就是我们熟知的原型&#xff0c;每一个对象都从原型继承属性. 二.所有通过对象直接量创建的对象都具有同一个原型对象&#xff0c;并可以通过JS代码Object.…

linux下执行shell修改用户密码,[转] 关于linux下通过shell命令(自动)修改用户密码...

本文章总结了如何手动、自动修改本地用户密码及远程机器的用户密码。对做自动化测试提供了自动修改用户密码的原理及方法。修改本地用户密码&#xff1a;1、交互配置本地用户&#xff1a;以root用户&#xff1a;passwd Changing password for user dewang.New UNIX password:BA…

Visual Studio提示Bonjour backend初始化失败

Visual Studio提示Bonjour backend初始化失败 错误信息&#xff1a;The Bonjour backend failed to initialize, automatic Mac Build server discovery will not be available.这是由于Windows下的Bonjour服务没有开启&#xff0c;需要到服务管理中&#xff0c;开启该服务&…

104 规约模拟器linux,变电站自动化系统调试装置 Substation automation system debugging device...

摘要&#xff1a;本发明涉及一种在电力系统中应用的变电站自动化系统调试装置,其结构为电源与触电保安器相连,触电保安器分别与平板电脑,标准规约模拟器,交换机及调制解调器相连;平板电脑通过多功能接口盒与交换机和电度表相连;通讯管理机分别与调制解调器,交换机及电度表相连.…

Unity3d 札记-Let's try shooting 知识点汇总

1\LineRenderer LineRenderer是用来在3d场景画直线的一个工具。 public LineRenderer laserline;laserline.SetPositon(0,startposition);laserline.SetPositon(1,endposition);//设置结束位置startpositon,endposition均为Vector3 ,空间三维坐标 laserline.enabled(true); las…

c语言如何控制电脑串口,C语言直接驱动硬件实现PC机的串口操作

熟悉C语言的人都知道&#xff0c;虽然C语言是一门高级语言&#xff0c;拥有很多高级语言的特性&#xff0c;但是作为一种由低级语言到高级的过渡&#xff0c;他又继承了很多低级语言的特性&#xff0c;那就是可以直接操作计算机的硬件设备。本人近日在学习有关PLC网络方面的知识…

iOS ReactiveCocoa 最全常用API整理(可做为手册查询)

本文出出http://www.code4app.com/blog-721976-195.html 本文适合有一定RAC基础的童鞋做不时的查询&#xff0c;所以本文不做详细解释。 一、常见类 1、RACSiganl 信号类。 RACEmptySignal &#xff1a;空信号&#xff0c;用来实现 RACSignal 的 empty 方法&#xff1b; RACRet…

c语言程序设计实验周信东指针,C语言程序设计实验4数组周信东

1、实验 4 数 组姓名&#xff1a;XXX 学号&#xff1a; 实验日期&#xff1a;XXX1. 实验目的和要求(1)掌握一维数组与二维数组的定义、使用及初始化方法。(2)学习数组作为函数参数的用法。(3)掌握字符数组和字符串函数的使用方法。(4)掌握与数组有关的常用排序算法&#xff0c;…