搜不到题解,乐。

由题意,\(a_i\) 对答案有贡献当且仅当 \(i\in{[l,r]}\) 且对于 \(\forall a_j| {a_i},j\notin[l,r]\)。

则对于每个 \(a_i\),分别维护其左侧及右侧第一个能被 \(a_i\) 整除的数为 \(lst_{i},nxt_{i}\)。

当 \(a_i\) 有贡献时,\(lst_i<l\le{i}\) 且 \(i\le{r}<nxt_i\)。符合条件的 \([l,r]\) 个数为 \((i-lst_i)\times(nxt_i-i)\)。

至于 \(lst\) 和 \(nxt\) 数组,求的过程中开个桶维护前面出现过约数的位置就好了。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
const int mod=1e9+7;
int n,a[N];
int t[N],ans;
int lst[N],nxt[N];
signed main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)
{
for(int j=1;j*j<=a[i];j++)
if(a[i]%j==0) lst[i]=max(lst[i],max(t[j],t[a[i]/j]));
t[a[i]]=i;
}
memset(t,0x3f3f3f,sizeof(t));
for(int i=n;i;i--)
{
nxt[i]=n+1;
for(int j=1;j*j<=a[i];j++)
if(a[i]%j==0) nxt[i]=min(nxt[i],min(t[j],t[a[i]/j]));
t[a[i]]=i;
}
//for(int i=1;i<=n;i++) cout<<nxt[i]<<" ";
for(int i=1;i<=n;i++)
ans=(ans+(i-lst[i])*(nxt[i]-i)%mod)%mod;
cout<<ans<<endl;
return 0;
}

YbtOJ 质数与约数 4.统计元素的更多相关文章

  1. python统计元素重复次数

    python统计元素重复次数 # !/usr/bin/python3.4 # -*- coding: utf-8 -*- from collections import Counter arr = [ ...

  2. JUC源码学习笔记8——ConcurrentHashMap源码分析1 如何实现低粒度锁的插入,如何实现统计元素个数,如何实现并发扩容迁移

    源码基于jdk1.8 这一片主要讲述ConcurrentHashMap如何实现低粒度锁的插入,如何实现统计元素个数,如何实现并发扩容迁移 系列文章目录和关于我 一丶ConcurrentHashMap概 ...

  3. 【基础数学】质数,约数,分解质因数,GCD,LCM

    1.质数: 质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能整除以其他自然数(质数),换句话说就是该数除了1和它本身以外不再有其他的因数. 2.约数: 如 ...

  4. YbtOJ#943-平方约数【莫比乌斯反演,平衡规划】

    正题 题目链接:http://www.ybtoj.com.cn/contest/122/problem/3 题目大意 \(S(i)\)表示\(i\)的约数个数,\(Q\)次询问给出\(n,m\)求 \ ...

  5. MATLAB 统计元素出现的次数

    可以使用 hist 函数: A = [1 2 8 8 1 8 2 1 8 2 1]; count = hist(A,unique(A)) count的结果与unique(A)对应.

  6. c++ 在指定长度的数组或者容器中,统计元素出现的次数(count)

    #include <iostream> // cout #include <algorithm> // count #include <vector> // vec ...

  7. Python中用dict统计列表中元素出现的次数

    01 Python增加元素,不像其他语言使用现实的操作接口,只需要dict[1]=3,如果字典中不存在1,则直接新增元素键值对(1,3),如果存在则替换键1为3. if key in dict:判断出 ...

  8. Python 统计列表中重复元素的个数并返回其索引值

    需求:统计列表list1中元素3的个数,并返回每个元素的索引 list1 = [3, 3, 8, 9, 2, 10, 6, 2, 8, 3, 4, 5, 5, 4, 1, 5, 9, 7, 10, 2 ...

  9. LeetCode - 统计数组中的元素

    1. 统计数组中元素总结 1.1 统计元素出现的次数 为了统计元素出现的次数,我们肯定需要一个map来记录每个数组以及对应数字出现的频次.这里map的选择比较有讲究: 如果数据的范围有限制,如:只有小 ...

  10. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

随机推荐

  1. Oracle批量处理SQL

    批量更新且更新字段数字需要递增 示例: DECLARE n int; -- 定义变量 BEGIN n:=1000010; --为n 赋值 FOR i IN (SELECT AGENCY.ID FROM ...

  2. ip2location.py

    import re import geoip2.database from tabulate import tabulate from matplotlib import pyplot as plt ...

  3. ESP32连接云服务器【WebSocket】

    ESP32连接云服务器[ESP32+宝塔面板] 相关文章 ESP32连接MQ Sensor实现气味反应 https://blog.csdn.net/ws15168689087/article/deta ...

  4. 【技术积累】Linux中的命令行【理论篇】【一】

    7z命令 命令介绍 7z命令是Linux系统中的一个压缩和解压缩工具,它可以用来创建.压缩和解压缩7z格式的文件.7z是一种高压缩率的文件格式,通常比其他常见的压缩格式(如zip和gzip)具有更高的 ...

  5. mysql根据mysqlbinlog恢复找回被删除的数据库

    年初和朋友一起做了个项目,到现在还没收到钱呢,今天中午时候突然听说之前的数据库被攻击了,业务数据库全部被删除.看有没有什么办法恢复,要是恢复不了,肯定也别想拿钱了吧? README FOR RECOV ...

  6. BTC中的数据结构

    BTC中的数据结构 普通指针 普通指针存储的是某个结构体在内存中的地址(假如P是指向一结构体的指针,那么P里面存放的就是该结构体在内存中的起始位置) Hash pointer(哈希指针) 对于如下的节 ...

  7. Unity 编辑器选择器工具类Selection 常用函数和用法

    Unity 编辑器选择器工具类Selection 常用函数和用法 点击封面跳转下载页面 简介 在Unity中,Selection类是一个非常有用的工具类,它提供了许多函数和属性,用于操作和管理编辑器中 ...

  8. js实现继承的五种方法及原型的继承关系

    继承是javascript中实现代码复用的一种方式,也能绑定对象或者函数之间的关系 为什么要继承 比如以下代码,Person.Student和Teacher构造函数,可以发现他们有一些特征 Perso ...

  9. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-11-playwright操作iframe-上篇

    1.简介 原估计宏哥这里就不对iframe这个知识点做介绍和讲解了,因为前边的窗口切换就为这种网页处理提供了思路,另一个原因就是虽然iframe很强大,但是现在很少有网站用它了.但是还是有小伙伴或者童 ...

  10. 【Unity3D】平面光罩特效

    1 前言 ​ 屏幕深度和法线纹理简介中对深度和法线纹理的来源.使用及推导过程进行了讲解,激光雷达特效中讲述了一种重构屏幕像素点世界坐标的方法,本文将沿用激光雷达特效中重构像素点世界坐标的方法,实现平面 ...