2015 Multi-University Training Contest 8 hdu 5381 The sum of gcd
The sum of gcd
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 641 Accepted Submission(s): 277
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = ;
struct node {
LL sum;
int Lg[],Rg[],Ln[],Rn[],Lc,Rc;
} tree[maxn<<];
node pushup(const node &a,const node &b) {
node ret;
ret.sum = a.sum + b.sum;
for(int i = ; i < a.Rc; ++i)
for(int j = ; j < b.Lc; ++j)
ret.sum += __gcd(a.Rg[i],b.Lg[j])*1LL*a.Rn[i]*b.Ln[j];
for(int i = ; i < b.Rc; ++i) {
ret.Rg[i] = b.Rg[i];
ret.Rn[i] = b.Rn[i];
}
for(int i = ; i < a.Lc; ++i) {
ret.Lg[i] = a.Lg[i];
ret.Ln[i] = a.Ln[i];
}
int d = b.Rg[b.Rc-],p = b.Rc;
for(int i = ; i < a.Rc; ++i) {
int tmp = __gcd(a.Rg[i],d);
if(tmp == ret.Rg[p-]) ret.Rn[p-] += a.Rn[i];
else {
ret.Rg[p] = tmp;
ret.Rn[p++] = a.Rn[i];
}
}
ret.Rc = p;
d = a.Lg[a.Lc-],p = a.Lc;
for(int i = ; i < b.Lc; ++i) {
int tmp = __gcd(d,b.Lg[i]);
if(tmp == ret.Lg[p-]) ret.Ln[p-] += b.Ln[i];
else {
ret.Ln[p] = b.Ln[i];
ret.Lg[p++] = tmp;
}
}
ret.Lc = p;
return ret;
}
void build(int L,int R,int v) {
if(L == R) {
tree[v].Lc = tree[v].Rc = ;
tree[v].Ln[] = tree[v].Rn[] = ;
scanf("%d",&tree[v].Lg[]);
tree[v].sum = tree[v].Rg[] = tree[v].Lg[];
return;
}
int mid = (L + R)>>;
build(L,mid,v<<);
build(mid+,R,v<<|);
tree[v] = pushup(tree[v<<],tree[v<<|]);
}
void query(int L,int R,int lt,int rt,int v) {
if(lt <= L && rt >= R) {
if(lt == L) tree[] = tree[v];
else tree[] = pushup(tree[],tree[v]);
return;
}
int mid = (L + R)>>;
if(lt <= mid) query(L,mid,lt,rt,v<<);
if(rt > mid) query(mid+,R,lt,rt,v<<|);
}
int main() {
int kase,n,m,x,y;
scanf("%d",&kase);
while(kase--) {
scanf("%d",&n);
build(,n,);
scanf("%d",&m);
while(m--) {
scanf("%d%d",&x,&y);
query(,n,x,y,);
printf("%I64d\n",tree[].sum);
}
}
return ;
}
2015 Multi-University Training Contest 8 hdu 5381 The sum of gcd的更多相关文章
- hdu 5381 The sum of gcd(线段树+gcd)
题目链接:hdu 5381 The sum of gcd 将查询离线处理,依照r排序,然后从左向右处理每一个A[i],碰到查询时处理.用线段树维护.每一个节点表示从[l,i]中以l为起始的区间gcd总 ...
- hdu 5381 The sum of gcd 2015多校联合训练赛#8莫队算法
The sum of gcd Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) T ...
- hdu 5381 The sum of gcd 莫队+预处理
The sum of gcd Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) P ...
- hdu 5381 The sum of gcd
知道对于一个数列,如果以x为左(右)端点,往右走,则最多会有log(a[x])个不同的gcd,并且有递减性 所以会分成log段,每一段的gcd相同 那我们可以预处理出对于每一个位置,以这个位置为左端点 ...
- HDU 5381 The sum of gcd (技巧,莫队算法)
题意:有一个含n个元素的序列,接下来有q个询问区间,对每个询问区间输出其 f(L,R) 值. 思路: 天真单纯地以为是道超级水题,不管多少个询问,计算量顶多就是O(n2) ,就是暴力穷举每个区间,再直 ...
- 2015 Multi-University Training Contest 8 hdu 5390 tree
tree Time Limit: 8000ms Memory Limit: 262144KB This problem will be judged on HDU. Original ID: 5390 ...
- 2015 Multi-University Training Contest 8 hdu 5383 Yu-Gi-Oh!
Yu-Gi-Oh! Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ID: ...
- 2015 Multi-University Training Contest 8 hdu 5385 The path
The path Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ID: 5 ...
- 2015 Multi-University Training Contest 3 hdu 5324 Boring Class
Boring Class Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
随机推荐
- struts1——静态ActionForm与动态ActionForm
在struts1中,我们能够使用ActionForm来获取从client端提交上来的数据.并通过action配置中的name属性.将某个ActionForm配置到某次请求应答的Action中.作为本次 ...
- Design库,所有控件的使用
导入地址com.android.support:design:23.2.0..输入design搜索到确认就可以. 布局中android.support.design.widget.XXX,调用控件 控 ...
- QString够绕的,分为存储(编译器)和解码(运行期),还有VS编译器的自作主张,还有QT5的变化
多读几篇,每篇取几句精华加深我对QString的理解. ------------------------------------------------------------------ QStri ...
- Node.js:GET/POST请求
ylbtech-Node.js:GET/POST请求 1.返回顶部 1. Node.js GET/POST请求 在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交. 表单提交到服务器一般 ...
- JavaScript实现延时提示框
<html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...
- python os 模块常用操作
python 2.7 os 常用操作 官方document链接 文件和目录 os.access(path, mode) 读写权限测试 应用: try: fp = open("myfile&q ...
- 最影响APP软件质量和成本的三个方面。希望大家一定要记在心里!
1.功能的开发方式 现在市场上存在的几种开发方式如下: a.web网页加壳生成APP web网页加壳生成APP的开发方式,先花几百块钱买个现成的手机网站模板,在加壳打包一个APP只需要5分钟,但是做出 ...
- es6学习 http://es6.ruanyifeng.com/
基础学习 http://es6.ruanyifeng.com/ 够了 1字符串 字符串的遍历器接口 for (let codePoint of 'foo') { console.log(code ...
- Solid Angle of A Cubemap Texel - 计算Cubemap的一个像素对应的立体角的大小
参考[http://www.rorydriscoll.com/2012/01/15/cubemap-texel-solid-angle/] 计算diffuse irradiance map或者求解sh ...
- 企业级任务调度框架Quartz(7) 线程在Quartz里的意义(1)
1.Java 中的线程 线程允许程序同一时间做很多任务,至少,看起来那些任务是并发执行的.在我的并发编程的帖子里有介绍线程的基本概念:我们知道在任一特定时刻仅有一个线程 在执行,但是 CPU ...