hdu 4961 Boring Sum(高效)
题目链接: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(高效)相关推荐
- hdu 5008 Boring String Problem(后缀数组+rmq)
题目链接:hdu 5008 Boring String Problem 题意: 给你一个字符串,有q个询问,每次询问该字符串所有的子串中字典序第k小的是哪个串,输出位置,如果有多个位置,输出最靠左的那 ...
- HDU 1244 Max Sum Plus Plus Plus
虽然这道题看起来和 HDU 1024 Max Sum Plus Plus 看起来很像,可是感觉这道题比1024要简单一些 前面WA了几次,因为我开始把dp[22][maxn]写成dp[maxn][2 ...
- HDU.1003 Max Sum
原题 HDU.1003 Max Sum 分类 动态规划 题意 计算从一个序列中最大连续子序列和.对应的起始元素和终止元素的位置. 输入/输出 要求与格式 样例数的确定 最开始一行开始输入样例数 每个样 ...
- hdu 1003 Max Sum 解题报告
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Problem Description Given a sequence a[1],a[2],a[3 ...
- HDU - 5381 The sum of gcd(莫队/线段树区间合并)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问需要回答区间 [L,R][L,R][L,R] 内所有子区间的 gcdgcdgcd 之和.更具体的,对于询问 ...
- HDU - 6955 Xor sum tire树 + 贪心
传送门 文章目录 题意: 思路: 题意: 给你一个数列aaa,你需要找出来一个长度最小且左端点最靠前的区间,使其异或和≥k\ge k≥k. n≤1e5,0≤ai,k<230n\le1e5,0\l ...
- HDU 5008 Boring String Problem ( 后缀数组求本质不同第k大子串)
Boring String Problem Zeronera题解 预处理sum数组记录不同字符串的个数,即sum[i] = n- sa[i] + 1 -height[i] + sum[i-1] (n为 ...
- 后缀数组 --- HDU 3518 Boring counting
Boring counting Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=3518 Mean: 给你一个字符串,求:至少出 ...
- hdu 3473 Minimum Sum 划分树
http://acm.hdu.edu.cn/showproblem.php?pid=3473 对于xl,xl+1--xr,使得[xi-x]和最小,显然x应当为其中的中位数.中位数可以通过求K大数解决, ...
最新文章
- OpenCV alpha(权因子) 融合举例
- calibre中的hcell_关于calibre的Hcell你知道多少?
- VC6中用DOM遍历网页中的元素
- 没有什么多模态任务是一层Transformer解决不了的!
- php ci model条件查询,php – CodeIgniter中的多条件WHERE子句
- ECharts 饼图 legend 样式修改
- 使用raphael.js绘制中国地图
- 基于分位数回归的静态CoVaR计算 案例与代码
- Eclipse调试时出现source not found的问题
- sqlserver 导出数据库表结构和数据生成脚本
- PyPDF2.utils.PdfReadError: Unexpected destination '/__WKANCHOR_2'
- 当桌面的快捷方式图标左下角出现一个X(叉)的时候应该怎么去掉
- (转)Palantir: 神秘的大数据公司
- 机器学习(六):支持向量机(SVM)
- Liang-Barskey裁剪算法(计算机图形学)
- 用类描述计算机CPU的速度和硬件的容量
- idea 使用mybatis generator生成代码时 报错 The specified target project directory src/main/java/ does not exis
- Android--ImageView读取本地路径图片
- java 分割字符串(多种方法)
- 2021高考语文作文成绩查询,2021高考语文作文已出炉,撒贝宁押题太准了,你有想写的冲动吗...
热门文章
- mysql数据库应用_MySQL数据库应用 从入门到精通 学习笔记
- vue对象拼接_vue 俩个数组对象合并成一个
- mfc怎么获取进程的线程数_Python多线程获取小米应用商店App,看看我是怎么做到的
- C++ 11 深度学习(七)位运算常见操作
- cookie无法读取bdstoken_第二章(第12节):cookie操作
- C语言的10大基础算法
- matlab 英语怎么读,MATLAB SPTooL
- python爬虫数据可视化_适用于Python入门者的爬虫和数据可视化案例
- 机箱硬盘指示灯不亮_安钛克DF600 FLUX机箱:FLUX平台第一款机箱,为全民电竞热“降温”...
- elisa数据处理过程图解_ELISA原理示意图详解.ppt