题意定义f(l,r)为去掉[l,r]部分后剩下的数任意两个数的最大公约数的最大值

现在求f(l,r)的和

由于每个数ai最大只有200000,因此我们穷举因子x,记录以其为因子的a[i]的i值并按i升序。

下面我们从大到小穷举每个因子x,我们依次计算以f(l,r)=x的区间数,

有了上述的维护信息,我们很容易三种情况的区间满足f(l,r)=x(我就不具体细说了)

令pre[i]表示当前以第i个位置结尾的区间满足任意j(1<=j<=pre[i]),f(j,i)<x

显然f(l,r)=x的区间数=当前还没计算过的区间数-∑pre[i]

这就要维护∑pre[i],每次修改是将一段区间pre[i]>x的数赋值为x

显然pre[i]是单调不上升,因此可以用线段树维护之

 #include<bits/stdc++.h>

 using namespace std;
typedef long long ll;
int laz[*],mi[*],mx[*];
ll tr[*];
vector<int> g[];
int n,m;
void build(int i,int l,int r)
{
laz[i]=-;
if (l==r) mx[i]=mi[i]=tr[i]=l;
else {
int m=(l+r)>>;
build(i*,l,m);
build(i*+,m+,r);
tr[i]=tr[i*]+tr[i*+];
mx[i]=max(mx[i*],mx[i*+]);
mi[i]=min(mi[i*],mi[i*+]);
}
} void work(int i,int l,int r,int x,int y,int z)
{
// if (i==1) cout <<z<<endl;
if (x>y) return;
if (mx[i]<=z) return;
if (x<=l&&y>=r&&mi[i]>z)
{
mi[i]=mx[i]=laz[i]=z;
tr[i]=(ll)(r-l+)*z;
}
else {
int m=(l+r)>>;
if (laz[i]>-)
{
laz[i*]=laz[i*+]=laz[i];
mi[i*]=mx[i*]=laz[i];
mi[i*+]=mx[i*+]=laz[i];
tr[i*]=(ll)laz[i]*(m-l+);
tr[i*+]=(ll)laz[i]*(r-m);
laz[i]=-;
}
if (x<=m) work(i*,l,m,x,y,z);
if (y>m) work(i*+,m+,r,x,y,z);
tr[i]=tr[i*]+tr[i*+];
mx[i]=max(mx[i*],mx[i*+]);
mi[i]=min(mi[i*],mi[i*+]);
}
} int main()
{
scanf("%d",&n);
for (int i=; i<=n; i++)
{
int x;scanf("%d",&x);
for (int j=; j*j<=x; j++)
if (x%j==)
{
g[x/j].push_back(i);
if (j*j!=x) g[j].push_back(i);
}
m=max(m,x);
}
build(,,n);
ll pre=(ll)n*(n+)/;
ll ans=;
for (int i=m; i; i--)
{
if (g[i].size()<) continue;
int j=g[i].size()-;
work(,,n,g[i][]+,g[i][j]-,g[i][]);
work(,,n,,g[i][j-]-,);
work(,,n,g[i][]+,n,g[i][]);
ans+=(pre-tr[])*(ll)i;
// cout <<tr[1]<<endl;
pre=tr[];
}
printf("%lld\n",ans);
}

codeforces 671C的更多相关文章

  1. Codeforces 671C - Ultimate Weirdness of an Array(线段树维护+找性质)

    Codeforces 题目传送门 & 洛谷题目传送门 *2800 的 DS,不过还是被我自己想出来了 u1s1 这个 D1C 比某些 D1D 不知道难到什么地方去了 首先碰到这类问题我们肯定考 ...

  2. codeforces 671C Ultimate Weirdness of an Array 线段树+构造

    题解上说的很清楚了,我照着写的,表示膜拜题解 然后时间复杂度我觉得应该是O(nlogn),虽然常数略大,预处理和倒着扫,都是O(nlogn) #include <stdio.h> #inc ...

  3. CodeForces 671C - Ultimate Weirdness of an Array

    题意: 给以一个定义, F(l, r) 的值表示序列 A[1:n]的子序列 A[1....(l-1),(r+1)...n] 之中 任意两个数的最大公约数的最大值. 求 Sum=∑i=1N∑j=1N(F ...

  4. Ultimate Weirdness of an Array CodeForces - 671C (gcd,线段树)

    大意: 定义一个数列的特征值为两个数gcd的最大值, $f(l,r)$表示数列删除区间$[l,r]$的元素后剩余元素的特征值, 求$\sum_{i=1}^n\sum_{j=i}^n{f(i,j)}$ ...

  5. Codeforces 671C. Ultimate Weirdness of an Array(数论+线段树)

    看见$a_i\leq 200000$和gcd,就大概知道是要枚举gcd也就是答案了... 因为答案是max,可以发现我们很容易算出<=i的答案,但是很难求出单个i的答案,所以我们可以运用差分的思 ...

  6. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  7. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  8. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  9. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

随机推荐

  1. WebKit资源加载和网络栈

    webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 WebKit资源加载 ...

  2. clientHeight & clientWidth & offsetHeight & offsetWidth & outerWidth & innerWidth & outerWidth & outerHeight

    clientHeight & clientWidth & offsetHeight & offsetWidth MDN https://developer.mozilla.or ...

  3. ES mapping field修改过程

    Elasticsearch 的坑爹事--记录一次mapping field修改过程 http://www.cnblogs.com/Creator/p/3722408.html Elasticsearc ...

  4. ES mapping的写入与查看

    Elasticsearch索引mapping的写入.查看与修改 https://blog.csdn.net/napoay/article/details/52012249 首先创建一个索引: curl ...

  5. JSON使用(4)

    把JSON文本转换为JavaScript对象 JSON最常见的用法之一,是从web服务器上读取JSON数据(作为文件或作为HttpRequest),将JSON数据转换为JavaScript对象,然后在 ...

  6. Reabble.com-KindleRSS新闻杂志订阅

    Reabble.com-KindleRSS新闻杂志订阅 TreeInsertions Tomcat部署war包后,运行时出现如下错误 RectangularCovering Reabble.com-K ...

  7. AtCoder Grand Contest 025 Problem D - Choosing Points

    题目大意:输入$n,d1,d2$,你要找到$n^2$个整点 x, y 满足$0 \leqslant x, y<2n$.并且找到的任意两个点距离,既不是$\sqrt{d1}$,也不是 $\sqrt ...

  8. BS架构下使用消息队列的工作流程

    异步通信 对于BS(Browser-Server 浏览器)架构,很多情景下server的处理时间较长. 如果浏览器发送请求后,保持跟server的连接,等待server响应,那么一方面会对用户的体验有 ...

  9. Spring学习-- SpEL表达式

    Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于 EL:SpEL 使用 #{...} 作为定界符 , 所有在大括号中的字符都将被认为是 SpE ...

  10. 随机洗牌算法Knuth Shuffle和错排公式

    Knuth随机洗牌算法:譬如现在有54张牌,如何洗牌才能保证随机性.可以这么考虑,从最末尾一张牌开始洗,对于每一张牌,编号在该牌前面的牌中任意一张选一张和当前牌进行交换,直至洗到第一张牌为止.参考代码 ...