离线+分块!!

思路:序列a[1],a[2],a[3]……a[n]

num[i]表示区间[L,R]中是i的倍数的个数;euler[i]表示i的欧拉函数值。

则区间的GCD之和sum=∑(C(num[i],2)*euler[i]).当增加一个数时,若有约数j,则只需加上num[j]*euler[j],之后再num[j]++;

反之亦然!!

代码如下:

 #include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define ll __int64
#define pi acos(-1.0)
#define MAX 20002
using namespace std;
int R,L,an[MAX],euler[MAX],ans[MAX],res,num[MAX];
bool vis[MAX],prime[MAX];
struct node
{
int x,y,l,p;
}q[MAX];
vector<int>p[MAX];
void init()//初始化欧拉函数值
{
int i,j;
for(i=;i<MAX;i++) euler[i]=i;
for(i=;i<MAX;i++)
if(euler[i]==i){
for(j=i;j<MAX;j+=i)
euler[j]=euler[j]/i*(i-);
}
}
void factor(int n)//分解因子
{
p[n].clear();
for(int i=;i*i<=n;i++){
if(n%i==){
p[n].push_back(i);
if(i*i!=n) p[n].push_back(n/i);
}
}
}
bool cmp(const node &a,const node &b)
{
if(a.l==b.l) return a.y<b.y;
return a.l<b.l;
}
void query(int x,int y,int flag)//查询操作
{
int t;
if(flag){
for(int i=x;i<L;i++){
for(int j=;j<p[an[i]].size();j++){
t=p[an[i]][j];
res+=num[t]*euler[t];
num[t]++;
}
}
for(int i=L;i<x;i++){
for(int j=;j<p[an[i]].size();j++){
t=p[an[i]][j];
num[t]--;
res-=num[t]*euler[t];
}
}
for(int i=y+;i<=R;i++){
for(int j=;j<p[an[i]].size();j++){
t=p[an[i]][j];
num[t]--;
res-=num[t]*euler[t];
}
}
for(int i=R+;i<=y;i++){
for(int j=;j<p[an[i]].size();j++){
t=p[an[i]][j];
res+=num[t]*euler[t];
num[t]++;
}
}
}
else{
for(int i=x;i<=y;i++){
for(int j=;j<p[an[i]].size();j++){
t=p[an[i]][j];
res+=num[t]*euler[t];
num[t]++;
}
}
}
L=x;R=y;
}
int main(){
int n,t,i,j,m,c,ca=;
init();
for(i=;i<=;i++) factor(i);
scanf("%d",&c);
while(c--){
scanf("%d",&n);
for(i=;i<=n;i++) scanf("%d",&an[i]);
m=sqrt(1.0*n);
scanf("%d",&t);
for(i=;i<t;i++){
scanf("%d%d",&q[i].x,&q[i].y);
q[i].l=q[i].x/m;
q[i].p=i;
}
sort(q,q+t,cmp);
res=;
memset(num,,sizeof(num));
for(i=;i<t;i++){
query(q[i].x,q[i].y,i);
ans[q[i].p]=res;
}
printf("Case #%d:\n",++ca);
for(i=;i<t;i++)
printf("%d\n",ans[i]);
}
return ;
}

hdu 4676 Sum Of Gcd的更多相关文章

  1. HDU 4676 Sum Of Gcd 【莫队 + 欧拉】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=4676 Sum Of Gcd Time Limit: 10000/5000 MS (Java/Others ...

  2. hdu 4676 Sum Of Gcd 莫队+phi反演

    Sum Of Gcd 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4676 Description Given you a sequence of ...

  3. hdu 4676 Sum Of Gcd 莫队+数论

    题目链接 给n个数, m个询问, 每个询问给出[l, r], 问你对于任意i, j.gcd(a[i], a[j]) L <= i < j <= R的和. 假设两个数的公约数有b1, ...

  4. HDU - 4676 :Sum Of Gcd (莫队&区间gcd公式)

    Given you a sequence of number a 1, a 2, ..., a n, which is a permutation of 1...n. You need to answ ...

  5. Sum Of Gcd(hdu 4676)

    Sum Of Gcd Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  6. 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 ...

  7. hdu 5381 The sum of gcd(线段树+gcd)

    题目链接:hdu 5381 The sum of gcd 将查询离线处理,依照r排序,然后从左向右处理每一个A[i],碰到查询时处理.用线段树维护.每一个节点表示从[l,i]中以l为起始的区间gcd总 ...

  8. 【HDU 5381】 The sum of gcd (子区间的xx和,离线)

    [题目] The sum of gcd Problem Description You have an array A,the length of A is nLet f(l,r)=∑ri=l∑rj= ...

  9. 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 ...

随机推荐

  1. 基于Httpfs访问HDFS的C++实现

    Httpfs是hadoop2.x中hdfs项目的内置应用,基于tomcat和jesery,对外提供完备HDFS操作的RESTful接口,无需安装客户端,可方便实现数据交互,如从windows访问存储在 ...

  2. mysql数据库创建database(实例),和用户,并授权

    前言:mysql创建用户的方法分成三种:INSERT USER表的方法.CREATE USER的方法.GRANT的方法. 一.账号名称的构成方式 账号的组成方式:用户名+主机(所以可以出现重复的用户名 ...

  3. 如何在Mac下使用TF/SD 卡制作Exynos 4412 u-boot启动盘

    /** ****************************************************************************** * @author    Maox ...

  4. 转:12种JavaScript MVC框架之比较

    Gordon L. Hempton是西雅图的一位黑客和设计师,他花费了几个月的时间研究和比较了12种流行的JavaScript MVC框架,并在博客中总结了每种框架的优缺点,最终的结果是,Ember. ...

  5. 20130909QA整理笔记

    做项目里遇到的一些问题!! 1.滚动条样式 webkit可以使用css来调节滚动条样式: http://www.cnblogs.com/rubylouvre/archive/2011/03/01/19 ...

  6. Nginx启动SSL功能,并进行功能优化,你看这个就足够了

    一:开始Nginx的SSL模块 1.1 Nginx如果未开启SSL模块,配置Https时提示错误 nginx: [emerg] the "ssl" parameter requir ...

  7. 为msysgit增加vim语法高亮文件

    在win7下装了msysgit,今天我遇到一个不爽的问题,打开git bash,用vim打开一个xml文件 结果都是黑屏的,没语法高亮,这个必须不能忍啊,我找到msysgit的安装目录,发现Vim73 ...

  8. Redis源码研究--跳表

    -------------6月29日-------------------- 简单看了下跳表这一数据结构,理解起来很真实,效率可以和红黑树相比.我就喜欢这样的. typedef struct zski ...

  9. PHP环境搭建(Windows8.1+IIS8.5+PHP5.6+PHPStorm)

    第一次接触php是在2014-5月份左右,当时是自己的主攻方向是C#,对php比较排斥, 其中很多一部分原因,就是PHP的断点调试一直无法配置成功,用echo打印日志的方式排错,使得自己对php心生怨 ...

  10. android 线程

    android线程: 通用多个线程通信管理框架: 1.Handler监听者框架:子线程是事件源,主线程是监听者.        Handler作为子线程的监听器出现:主线程中生成Handler的子类, ...