HDU
来源:互联网 发布:停止mysql服务命令 编辑:程序博客网 时间:2024/06/05 13:14
Give you a sequence of N(N≤100,000)N(N≤100,000) integers : a1,…,an(0
#include<bits/stdc++.h>using namespace std;int inf=0x3f3f3f3f;int f[100001][30],tu[100001];int n, m;int gcd(int q,int w){ if(!w)return q; return __gcd(w,q%w);}void rmq(int c){ int cc = log2(c)+1; for (int a = 1; a <= cc; a++) { for (int b = 1; b <= c; b++) { if (b + (1 << a) - 1 <= c) { f[b][a] = __gcd(f[b][a - 1], f[b + (1 << (a - 1))][a - 1]); // fx[b][a] = min(fx[b][a - 1], fx[b + (1 << (a - 1))][a - 1]); } } }}int xunwenda(int zuo, int you){ int k = log2(you - zuo + 1); return __gcd(f[zuo][k], f[you - (1 << k) + 1][k]);}int jiance(int z,int y,int e){ if(xunwenda(z,y)==e)return 1; if(xunwenda(z,y)>e)return 2; return 0;}int r,t;int main(){ int T; cin>>T; int u=0; while(T--) { memset(f,0,sizeof(f)); printf("Case #%d:\n",++u); cin>>n; for(int a=1;a<=n;a++)scanf("%d",&tu[a]); for(int a=1;a<=n;a++)f[a][0]=tu[a]; rmq(n); cin>>m; map<long long ,long long >mp; for(int a=1;a<=n;a++) { int zz=a; while(zz<=n) { int cs=xunwenda(a,zz); int z=a,y=n; int daan=0; while(z<=y) { int mid=(z+y)/2; int tut=jiance(a,mid,cs); if(tut==1) { z=mid+1; daan=max(daan,mid); } else if(tut==2) { z=mid+1; } else y=mid-1; } mp[cs]+=daan-zz+1; zz=daan+1; } } for(int a=1;a<=m;a++) { scanf("%d%d",&r,&t); printf("%d %lld\n",xunwenda(r,t),mp[xunwenda(r,t)]); } }}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 在自己blog埋点的尝试
- 虚拟币开发专题(市面上的数字货币地址格式是怎样的?)
- RSS——<item> 元素
- Android实现点击通知栏后,先启动应用再打开目标Activity
- Mysql now()加减指定秒
- HDU
- Mac远程桌面连接windows
- 历史状态管理
- 数论及应用学习__Part1 拓展欧几里得【3/5】
- 类的加载、连接和初始化
- 冒泡和快排的js实现
- 【C++】【C++ Premier 习题集 P75页程序纠错没成功!欢迎指教】
- 【DP】最长回文字串【516. Longest Palindromic Subsequence】
- 常用排序算法