【c++入门(2)】前缀和
大纲
1.计算前缀和
2.计算字段和
3.后缀和
4.前缀积
5.后缀积
6.例题
1.计算前缀和
基础问题:
思路1:
枚举
cin ();
for (int i = 1; i <= q; i++)
{cin >> x;int sum = 0;for (int j = 1; j <= x; j++){sum += a[j];}cout << sum << endl;
}
时间复杂度:O(QN) 极端情况时间复杂度会超!
思路2:
前缀和
可以发现:
以x的角度再来看看我们的发现有什么作用:
所以我们就可以用递推 + 查表 来做这道题:
sum[0] = 0;for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + A[i];for (int i = 1; i <= q; i++){cin >> x;cout << sum[x] << endl;}
2.计算字段和
基础问题:
思路1:
枚举
cin ();for (int i = 1; i <= q; i++){cin >> l >> r;int sum = 0;for (int j = l; j <= r; j++){sum += a[j];}cout << sum << endl;}
同样以x的视角来看:
最后可以得出式子:
sum [ l, r ] = sum [ r ] - sum [ l - 1 ]
这样可以通过前缀和的思路来写这道题:
sum[0] = 0;
for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + A[i];
for (int i = 1; i <= q; i++)
{cin >> l >> r;cout << sum[r] - sum[l - 1] << endl;
}
时间复杂度:O(n)
3.计算后缀和
其实后缀和就只是把前缀和反过来:
时间复杂度:O(n)。
4.前缀积
其实你只要懂了前缀和,你就很容易懂其他的,前缀积其实就是将计算前缀和的’+‘,换成’ * ’
时间复杂度:O(n)
5.后缀积
同样也是将前缀积反过来:
时间复杂度:O(n)
6.例题
互质序列
题目描述你知道什么是“互质序列”吗?就是一个由n个正整数组成的序列,它们的GCD(最大公约数)等于1.这样的互质序列很容易找到。但是我们可以尝试通过删除一个整数来最大化这些整数的GCD。现在给出一个序列,请最大化其元素的GCD。
输入格式第一行,一个整数T,表示测试数据的组数。1≤T≤10对于每组测试数据,第一行,一个整数n,表示序列中正整数的数量,3≤n≤100000接下来一行,包含n个正整数a1,a2...an,表示序列中的元素,1≤ai≤10^9
输出格式对于每组数据输出一行,一个整数,表示GCD的最大值
输入输出样列
输入样例1:3
3
1 1 1
5
2 2 2 3 2
4
1 2 4 8输出样例1:1
2
2
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <stack>
#include <list>
#include <limits.h>
using namespace std;
int n,a[100010],l[100010],r[100010];
int t;
int gcd(int x,int y){return y==0?x:gcd(y,x%y);
}
int main(){cin>>t;while(t--){cin>>n;int ans=0;memset(l,0,sizeof(l));memset(r,0,sizeof(r));for(int i=1;i<=n;i++){cin>>a[i];l[i]=gcd(l[i-1],a[i]);}for(int i=n;i>=1;i--) r[i]=gcd(r[i+1],a[i]);for(int i=1;i<=n;i++){ans=max(ans,gcd(l[i-1],r[i+1]));}cout<<ans<<endl;}return 0;
}
【c++入门(2)】前缀和相关推荐
- ⭐算法入门⭐《前缀和》中等02 —— LeetCode 974. 和可被 K 整除的子数组
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 1)初始化前缀和 2)哈希表统计 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题 ...
- 【算法】动态规划+“背包九讲”原理超详细讲解+常见dp问题(9种)总结
目录 一.动态规划(DP) 二.背包九讲 (1)完全背包 P1616 疯狂的采药(完全背包) (2)01背包 滚动数组 一维数组 P1048 采药(01背包) 01背包表格图示 (3)多重背包 整数拆 ...
- 提高篇 第四部分 数据结构 第1章 树状树组
树状数组 树状数组_百度百科 树状数组 - Fast and Furious - C++博客 树状数组彻底入门,算法小白都看得懂的超详细解析 树状数组彻底入门,算法小白都看得懂的超详细解析_Small ...
- 算法入门篇七 前缀树
牛客网 左程云老师的算法入门课 找二叉树的节点的后继节点 原则 如果节点有右子树,那么后继节点就是右子树的最左边的第一个节点 如果节点没有右子树,如果节点是父节点的右孩子,就继续往上找,直到找到一个父 ...
- ACM入门之【前缀和】
前缀和在ACM中算是一个简单易学,且十分重要的一个算法. 前缀和的种类: 一维前缀和 二维前缀和 高维前缀和(比较少见) 树上前缀和 对于一维前缀和,它可以解决O(1)的时间复杂度来获取某一区间的和. ...
- 前缀和与差分的使用(新手快速入门)
前缀和 前缀和定义:s[0]=0; s[i]=s[i-1]+a[i]; 其中s[i]数组为a[i]数组的前缀和: 有了前缀和后,给定一个区间 [l,r] 的和就可以表示为: sum=s[r] -s[l ...
- 来看看小夏の算法入门——前缀和差分
目录 一.前言 二.前缀和 2.1.求和 2.2.分析: 2.3.什么是前缀和数组? 2.4.怎么求前缀和数组? 2.5.作用 2.6.题解: 2.7.二维前缀和 2.8.分析: 2.9.题解: 三. ...
- 《算法零基础100讲》(第57讲) 前缀和(一) 线性前缀和入门
文章目录 零.写在前面 一.概念定义 1.部分和 2.朴素做法 3.前缀和 4.前缀和的边界值 5.边界处理 6.再看部分和 二.题目描述 1.定义 2.求解 三.算法详解 四.源码剖析 五.推荐专栏 ...
- 洛谷 P5638 光骓者的荣耀 Java实现 前缀和入门
题目描述 题目描述 小 K 打下的江山一共有 n 个城市,城市 i 和城市 i+1 有一条双向高速公路连接,走这条路要耗费时间 a_i 小 K 为了关心人民生活,决定定期进行走访.他每一次会从 1 号 ...
最新文章
- Beta冲刺 (7/7)
- Vue 结合Element UI 实现导航的 router 属性 expected boolean,got string
- 【verilog语法】关于testbench与被测module的输入输出数据类型定义:reg/wire原因
- 基于金融知识图谱的会计欺诈风险识别方法
- javascript编写_如何在JavaScript中使用解构来编写更简洁,功能更强大的代码
- 强化学习研究什么?用白话讲就是……
- c++ 编译代码时Link失败,无法关闭目标文件
- oracle odi 目标数据存储: 临时目标数据存储未与连接关联,ODI知识模块--IKM Oracle Incremental Update...
- qq发送文件时显示服务器拒绝,qq给对方发文件为什么服务器拒绝接收 - 卡饭网...
- 1u服务器电源制作,1U服务器电源也可以做机箱电源
- Scene Graph Generation by Iterative Message Passing解读
- K3老单开发-销售订单计算比例(实际价格反推)
- Macbook双系统 10.11及Ubuntu
- 情侣的网站代码java_一个创意满满的情侣网站
- NumPy的矩阵表示方法
- 数字集成电路设计的流程2
- 【操作系统之进程了解】
- java中appletviewer是什么意思_自动生成供AppletViewer运行Java Applet的HTML文件
- 使用 EMQ X Neuron 构建基于 Modbus 的 IIoT 应用
- 企业选择私有化部署的IM即时通讯软件,全力保护信息安全