先用st表处理出所有l-r的GCD值,然后二分求得这些值一共出现了多少次。

 #include<bits/stdc++.h>

 #define inf 0x3f3f3f3f

 const int maxn=;

 using namespace std;

 typedef pair<int,int> P;

 int l,r;

 int icase;

 int t,n,q;

 int a[maxn+];

 int dp[maxn+][];

 map<int,long long> m;

 int gcd(int a,int b){
return b==?a:gcd(b,a%b);
} void RMQ(){
for(int i=;i<=n;i++){
dp[i][]=a[i];
}
for(int j=;j<;j++){
for(int i=;i<=n;i++){
if(i+((<<(j-))-)<=n)
dp[i][j]=gcd(dp[i][j-],dp[i+(<<(j-))][j-]);
//printf("%d\n",dp[i][j]);
}
}
} int query(int l,int r){
int k=(int)log2(double(r-l+));
return gcd(dp[l][k],dp[r-(<<k)+][k]);
} void Cal(){
for(int i=;i<=n;i++){
int GCD=a[i],tail=i;
while(tail<=n){
int lb=tail,ub=n,mid=(lb+ub)>>;
while(ub-lb>){
mid=(lb+ub)>>;
if(query(i,mid)==GCD) lb=mid;
else ub=mid;
}
if(query(i,ub)==GCD){
m[GCD]+=(ub-tail+);
tail=ub+;
GCD=query(i,tail);
} else if(query(i,mid)==GCD){
m[GCD]+=(mid-tail+);
tail=mid+;
GCD=query(i,tail);
}
else{
m[GCD]+=(lb-tail+);
tail=lb+;
GCD=query(i,tail);
}
}
}
} void solve(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
RMQ();
Cal();
scanf("%d",&q);
printf("Case #%d:\n",++icase);
while(q--){
scanf("%d%d",&l,&r);
int res=query(l,r);
printf("%d %I64d\n",res,m[res]);
}
} void init(){
m.clear();
memset(dp,,sizeof(dp));
} int main()
{
scanf("%d",&t);
while(t--){
init();
solve();
}
return ;
}

hdu5726-GCD-ST表+二分的更多相关文章

  1. 2016多校联合训练1 D题GCD (ST表+二分)

    暑假颓废了好久啊...重新开始写博客 题目大意:给定10w个数,10w个询问.每次询问一个区间[l,r],求出gcd(a[l],a[l+1],...,a[r])以及有多少个区间[l',r']满足gcd ...

  2. GCD(st表+二分)

    GCD Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  3. 「ZJOI2018」胖(ST表+二分)

    「ZJOI2018」胖(ST表+二分) 不开 \(O_2\) 又没卡过去是种怎么体验... 这可能是 \(ZJOI2018\) 最简单的一题了...我都能 \(A\)... 首先我们发现这个奇怪的图每 ...

  4. 【BZOJ-4310】跳蚤 后缀数组 + ST表 + 二分

    4310: 跳蚤 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 180  Solved: 83[Submit][Status][Discuss] De ...

  5. BZOJ4556 [Tjoi2016&Heoi2016]字符串 SA ST表 二分答案 主席树

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4556.html 题目传送门 - BZOJ4556 题意 给定一个长度为 $n$ 的字符串 $s$ . ...

  6. hdu5289 ST表+二分

    用裸的St表+暴力枚举查询时稳TLE的,可以枚举每个区间的起点+二分满足条件的区间右端,这样复杂度是O(nlogn) #include<iostream> #include<cstr ...

  7. luoguP5108 仰望半月的夜空 [官方?]题解 后缀数组 / 后缀树 / 后缀自动机 + 线段树 / st表 + 二分

    仰望半月的夜空 题解 可以的话,支持一下原作吧... 这道题数据很弱..... 因此各种乱搞估计都是能过的.... 算法一 暴力长度然后判断判断,复杂度\(O(n^3)\) 期望得分15分 算法二 通 ...

  8. 洛谷P4501/loj#2529 [ZJOI2018]胖(ST表+二分)

    题面 传送门(loj) 传送门(洛谷) 题解 我们对于每一个与宫殿相连的点,分别计算它会作为多少个点的最短路的起点 若该点为\(u\),对于某个点\(p\)来说,如果\(d=|p-u|\),且在\([ ...

  9. ZSTU 4241 圣杯战争(ST表+二分)

    题目链接  ZSTU 4241 问题转化为有很多区间,现在每次给定一个区间求这个区间和之前所有区间中的某一个的交集的最大长度. 强制在线. 首先我们把所有的区间预处理出来. 然后去重(那些被包含的小区 ...

  10. Codeforces 713D Animals and Puzzle(二维ST表+二分答案)

    题目链接 Animals and Puzzle 题意  给出一个1e3 * 1e3的01矩阵,给出t个询问,每个询问形如x1,y1,x2,y2 你需要回答在以$(x1, y1)$为左上角,$(x1, ...

随机推荐

  1. L90

    On Motes and Beams 微尘与栋梁 It is curious that our own offenses should seem so much less heinous than t ...

  2. 华为USG6500系列

    华为USG6500: ssh 登录配置 time-range 相关配置:<USG6000V1>system-view Enter system view, return user view ...

  3. ACM学习历程—HDU 5317 RGCDQ (数论)

    Problem Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to find more an ...

  4. vue文件名规范

    之前有看过一些命名规范,也看到说vue文件命名要么全是小写要么就是用小写 + '-':其实看到的时候有点不以意,因为本地能跑起项目:发布能正常访问也就OK了. 但是今天在做自动化部署的时候碰到一个问题 ...

  5. 动态库*.so制作

    转自:http://www.2cto.com/os/201308/238936.html 在linux下制作动态库*.so.   1.linux下动态库的制作 //so_test.h #include ...

  6. [Forward]Improving Web App Performance With the Chrome DevTools Timeline and Profiles

    Improving Web App Performance With the Chrome DevTools Timeline and Profiles We all want to create h ...

  7. prototype for '类名::函数名'does not match any in class'类名'

    函数声明和定义参数类型必须相同. 前置声明一定要放到名称空间内,代表该名称空间内的类.

  8. Spring入门第十二课

    Bean的配置方法 通过工厂方法(静态工厂方法&实例工厂方法),FactoryBean 通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,当客户 ...

  9. 关于JSP页面中的pageEncoding和contentType两种属性的区别

    转自:http://blog.csdn.net/dragon4s/article/details/6604624 JSP指令标签中<%@ page contentType="text/ ...

  10. 解决错误---undefined reference to `pthread_create‘

    今天试着敲了一下APUE的小例子,遇到了个错误 -----  undefined reference to `pthread_create.(为自己这么晚接触多线程惭愧). 上网上查了一下,借人经验. ...