hdu 5726 2016 Multi-University Training Contest 1(二分+dp)
来源:互联网 发布:怎样消费到淘宝v2 编辑:程序博客网 时间:2024/06/13 02:46
#include<iostream>#include<cstdio>#include<cstring>#include<map>#include<cmath>using namespace std;int n,m,dp[100005][20],a[100005];map<int,long long> mp;int gcd(int a,int b){ if(a<b) swap(a,b); return a%b?gcd(b,a%b):b;}int solve(int l,int r){ int temp=(int)log2(1.0*(r-l+1)); temp=gcd(dp[l][temp],dp[r-(1<<temp)+1][temp]); return temp;}void init(){ for(int i=1;i<=n;i++) dp[i][0]=a[i]; for(int i=1;i<20;i++) for(int j=1;j<=n&&(j+(1<<i)-1<=n);j++) dp[j][i]=gcd(dp[j][i-1],dp[j+(1<<(i-1))][i-1]); for(int i=1;i<=n;i++) { int temp=dp[i][0],j=i; while(j<=n) { temp=solve(i,j); int l=j,r=n; while(l<r) { int mid=(l+r+1)>>1; if(solve(i,mid)==temp) l=mid; else r=mid-1; } mp[temp]+=l-j+1; j=l+1; } }}int main(){ int t,cnt=0,i,l,r,res; scanf("%d",&t); while(t--&&scanf("%d",&n)!=EOF) { printf("Case #%d:\n",++cnt); mp.clear(); for(i=1;i<=n;i++) scanf("%d",a+i); init(); scanf("%d",&m); while(m--&&scanf("%d%d",&l,&r)!=EOF) { res=solve(l,r); printf("%d %lld\n",res,mp[res]); } } return 0;}
0 0
- hdu 5726 2016 Multi-University Training Contest 1(二分+dp)
- hdu 5791 2016 Multi-University Training Contest 5(dp)
- 2016 Multi-University Training Contest 1 1004 hdu 5726 二分+RMQ
- RMQ+二分——GCD ( HDU 5726 ) ( 2016 Multi-University Training Contest 1 1004 )
- 2016 Multi-University Training Contest 1-1005---HDU 5727 Necklace(枚举+二分图匹配)
- 2016 Multi-University Training Contest 1-1004---HDU 5726 GCD
- (HDU 5726)2016 Multi-University Training Contest 1 GCD(数学)
- 2016 Multi-University Training Contest 1 GCD【RMQ+二分】
- hdu 5726 GCD(2016 Multi-University Training Contest 1线段树)
- 2016 Multi-University Training Contest 1 1004 GCD HDU 5726 (RMQ)
- HDU5729 2016 Multi-University Training Contest 1 (dp+连通图)
- 2016 Multi-University Training Contest 5 1011 Two(DP)
- hdu 5763 Another Meaning(2016 Multi-University Training Contest 4——dp+kmp)
- hdu 5791 Two(2016 Multi-University Training Contest 5——DP)
- hdu 5781 2016 Multi-University Training Contest 5(期望dp)
- HDU 5791 Two(DP)2016 Multi-University Training Contest 5
- (HDU 5733)2016 Multi-University Training Contest 1 tetrahedron(几何)
- 2016 Multi-University Training Contest 1 1002 hdu 5724 博弈
- WPF报表
- Leetcode 107. Binary Tree Level Order Traversal II (Easy) (cpp)
- TCP三次握手,四次挥手,NAT和代理服务器的原理
- Java异常处理-----运行时异常(RuntimeException)
- 【C++ 与 STL】集合:set
- hdu 5726 2016 Multi-University Training Contest 1(二分+dp)
- karma +jasmine+karma-coverage
- IO流以日志文件记录异常
- 并发编程之锁--由浅到深!
- linux从入门到高手的学习书籍整理
- 数论基础1011 UVA 11754 剩余定理+枚举
- Sublime Text 默认是没有显示或隐藏行号的快捷键
- HDU—1052—Tian Ji -- The Horse Racing
- 常用聚类算法以及算法评价