题目链接:hdu 4961 Boring Sum

题目大意:给定ai数组;

  • 构造bi, k=max(j|0<j<i,aj%ai=0), bi=ak;
  • 构造ci, k=min(j|i<j≤n,aj%ai=0), ci=ak;
    求∑i=1nbi∗ci

解题思路:由于ai≤105,所以预先处理好每一个数的因子,然后在处理bi,ci数组的时候,每次遍历一个数。就将其全部的因子更新,对于bi维护最大值,对于ci维护最小值。

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>using namespace std;
typedef long long ll;
const int maxn = 1e5;
const int INF = 0x3f3f3f3f;int n, arr[maxn+5], b[maxn+5], c[maxn+5], v[maxn+5];
vector<int> g[maxn+5];void get_factor (int n) {for (int i = 1; i <= n; i++)g[i].clear();for (int i = 1; i <= n; i++) {for (int j = i; j <= n; j += i)g[j].push_back(i);}
}void init () {memset(v, 0, sizeof(v));for (int i = 1; i <= n; i++) {int u = arr[i];int k = (v[u] == 0 ? i :v[u]);b[i] = arr[k];for (int j = 0; j < g[u].size(); j++)v[g[u][j]] = max(v[g[u][j]], i);}memset(v, INF, sizeof(v));for (int i = n; i >= 1; i--) {int u = arr[i];int k = (v[u] == INF ? i : v[u]);c[i] = arr[k];for (int j = 0; j < g[u].size(); j++)v[g[u][j]] = min(v[g[u][j]], i);}
}int main () {get_factor(maxn);while (scanf("%d", &n) == 1 && n) {for (int i = 1; i <= n; i++)scanf("%d", &arr[i]);init();ll ans = 0;for (int i = 1; i <= n; i++)ans = ans + b[i] * 1LL * c[i];printf("%I64d\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/lytwajue/p/6715549.html

hdu 4961 Boring Sum(高效)相关推荐

  1. hdu 5008 Boring String Problem(后缀数组+rmq)

    题目链接:hdu 5008 Boring String Problem 题意: 给你一个字符串,有q个询问,每次询问该字符串所有的子串中字典序第k小的是哪个串,输出位置,如果有多个位置,输出最靠左的那 ...

  2. HDU 1244 Max Sum Plus Plus Plus

    虽然这道题看起来和 HDU 1024  Max Sum Plus Plus 看起来很像,可是感觉这道题比1024要简单一些 前面WA了几次,因为我开始把dp[22][maxn]写成dp[maxn][2 ...

  3. HDU.1003 Max Sum

    原题 HDU.1003 Max Sum 分类 动态规划 题意 计算从一个序列中最大连续子序列和.对应的起始元素和终止元素的位置. 输入/输出 要求与格式 样例数的确定 最开始一行开始输入样例数 每个样 ...

  4. hdu 1003 Max Sum 解题报告

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Problem Description Given a sequence a[1],a[2],a[3 ...

  5. HDU - 5381 The sum of gcd(莫队/线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问需要回答区间 [L,R][L,R][L,R] 内所有子区间的 gcdgcdgcd 之和.更具体的,对于询问 ...

  6. HDU - 6955 Xor sum tire树 + 贪心

    传送门 文章目录 题意: 思路: 题意: 给你一个数列aaa,你需要找出来一个长度最小且左端点最靠前的区间,使其异或和≥k\ge k≥k. n≤1e5,0≤ai,k<230n\le1e5,0\l ...

  7. HDU 5008 Boring String Problem ( 后缀数组求本质不同第k大子串)

    Boring String Problem Zeronera题解 预处理sum数组记录不同字符串的个数,即sum[i] = n- sa[i] + 1 -height[i] + sum[i-1] (n为 ...

  8. 后缀数组 --- HDU 3518 Boring counting

    Boring counting Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=3518 Mean: 给你一个字符串,求:至少出 ...

  9. hdu 3473 Minimum Sum 划分树

    http://acm.hdu.edu.cn/showproblem.php?pid=3473 对于xl,xl+1--xr,使得[xi-x]和最小,显然x应当为其中的中位数.中位数可以通过求K大数解决, ...

最新文章

  1. OpenCV alpha(权因子) 融合举例
  2. calibre中的hcell_关于calibre的Hcell你知道多少?
  3. VC6中用DOM遍历网页中的元素
  4. 没有什么多模态任务是一层Transformer解决不了的!
  5. php ci model条件查询,php – CodeIgniter中的多条件WHERE子句
  6. ECharts 饼图 legend 样式修改
  7. 使用raphael.js绘制中国地图
  8. 基于分位数回归的静态CoVaR计算 案例与代码
  9. Eclipse调试时出现source not found的问题
  10. sqlserver 导出数据库表结构和数据生成脚本
  11. PyPDF2.utils.PdfReadError: Unexpected destination '/__WKANCHOR_2'
  12. 当桌面的快捷方式图标左下角出现一个X(叉)的时候应该怎么去掉
  13. (转)Palantir: 神秘的大数据公司
  14. 机器学习(六):支持向量机(SVM)
  15. Liang-Barskey裁剪算法(计算机图形学)
  16. 用类描述计算机CPU的速度和硬件的容量
  17. idea 使用mybatis generator生成代码时 报错 The specified target project directory src/main/java/ does not exis
  18. Android--ImageView读取本地路径图片
  19. java 分割字符串(多种方法)
  20. 2021高考语文作文成绩查询,2021高考语文作文已出炉,撒贝宁押题太准了,你有想写的冲动吗...

热门文章

  1. mysql数据库应用_MySQL数据库应用 从入门到精通 学习笔记
  2. vue对象拼接_vue 俩个数组对象合并成一个
  3. mfc怎么获取进程的线程数_Python多线程获取小米应用商店App,看看我是怎么做到的
  4. C++ 11 深度学习(七)位运算常见操作
  5. cookie无法读取bdstoken_第二章(第12节):cookie操作
  6. C语言的10大基础算法
  7. matlab 英语怎么读,MATLAB SPTooL
  8. python爬虫数据可视化_适用于Python入门者的爬虫和数据可视化案例
  9. 机箱硬盘指示灯不亮_安钛克DF600 FLUX机箱:FLUX平台第一款机箱,为全民电竞热“降温”...
  10. elisa数据处理过程图解_ELISA原理示意图详解.ppt