二阶差分题单

2024-04-16 03:36
文章标签 二阶 差分 题单

本文主要是介绍二阶差分题单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原理

差分与前缀和互为逆运算,故将二阶差分数组进行两次前缀和操作得到结果。

下面我们用一个例子理解:

原差分数组
i0123456789
a[i]1001000000
一次前缀和操作后的数组
i0123456789
a[i]1112222222
两次前缀和操作后的数组
i0123456789
a[i]12357911131517

                可以看到两次前缀和数组结果中,

                0 <= i <= 2序列①结果为 1 2 3,形成公差 d = 1 的等差数列

                3 <= i <= 9序列②结果为 5 7 9 11 13 15 17,形成公差 d = 2 的等差数列

                这是因为 原数组中 a[0] = 1, a[3] = 1。一次前缀和后序列①的每个数都变为了 1,

                序列②的每个数都变为了 2。再进行一次前缀和后序列①内相邻的两个数相差 1,

                序列②内相邻的两个数相差 2。

同理推广,二阶差分是一个公差叠加的过程,即对原数组的某个数操作就是改变以从当前数开头的序列的公差。

总结起来:

我们想要得到区间为 [l, r] ,公差为 d 等差序列 d, 2 * d, ... , d * (r - l),

只需a[l] += d, a[r + 1] = -d,再进行两次前缀和。

想要得到区间为 [l, r] ,以 x 为首项,公差为 d 等差序列 x + d, x + 2 * d, ... , x + d * (r - l)。

那么可以做以下操作 ①a[l] += x, a[l + 1] += -x。②a[l] += d, a[r + 1] = -d。③两次前缀和

题目

 绝世武功(板子题)

#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{int n, m, ans = 0; cin >> n >> m;vector<int>a(n + 1);for(int i = 1; i <= m; i ++){int  l, r, s, e; cin >> l >> r >> s >> e;int d = (e - s) / (r - l);a[l] += s;a[l + 1] += (d - s);a[r + 1] += (-e - d);a[r + 2] += e;}for(int i = 1; i <= n; i ++) a[i] += a[i - 1];for(int i = 1; i <= n; i ++) a[i] += a[i - 1];for(int i = 1; i <= n; i ++) ans += a[i];//, cout << a[i] << " ";// cout << '\n';cout << ans << '\n';return 0;
}

P8811 [蓝桥杯 2022 国 C] 六六大顺(高精度 + 二阶差分)

观察到111 x 111 = 12321,两个等差序列可以用二阶差分解决

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 25;signed main()
{	ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int n; cin >> n;int mx = 2e7 + 10;vector<int>a(mx);for(int i = 1; i <= n; i ++){a[1] += 36;a[i + 1] -= 2 * 36;a[2 * i + 1] += 36;}for(int i = 1; i <= 2 * n + 1; i ++) a[i] += a[i - 1];for(int i = 1; i <= 2 * n + 1; i ++) a[i] += a[i - 1];int t = 0;int cnt = 0;for(int i = 1; i < mx; i ++){a[i + 1] += a[i] / 10;a[i] %= 10;if(a[i]) cnt = i;}for(int i = cnt; i >= 1; i --) cout << a[i];cout << '\n';
}

P5026 Lycanthropy(二阶差分)

等差数列变化图,直接上二阶差分

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 25; 
signed main()
{	ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int n, m; cin >> n >> m;vector<int>a(2e6 + 10);int da = 40010;for(int i = 1; i <= n; i ++){int v, x; cin >> v >> x;a[x - 3 * v + 1 + da] += 1;a[x - 2 * v + 1 + da] += -2;a[x + 1 + da] += 2;a[x + 2 * v + 1 + da] += -2;a[x + 3 * v + 1 + da] += 1;}for(int i = 1; i <= 2e6; i ++) a[i] += a[i - 1];for(int i = 1; i <= 2e6; i ++) a[i] += a[i - 1];for(int i = 1; i <= m; i ++) cout << a[i + da] << " ";cout << '\n';
}

这篇关于二阶差分题单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907699

相关文章

长尾式差分放大电路调零

长尾式放大电路用了两个参数相同的三极管,但实际上并没有完全相同的三极管,所以为了提高差分放大电路的对称性(一边电流增加多少,另一边电流减小多少,即能在电阻Re上产生的压降不变(后面做虚地处理)),在下图中加入可调电阻,调节可调电阻的值,便可使输入为零时 输出也为零。 可调电阻尽量选小一些:①过大的可调电阻会影响动态的放大倍数,②在选三极管时选的是参数接近的三极管,所以用小的可调电阻微调即可。

算法基础精选题单 动态规划(dp)(区间dp)(个人题解)

目录 前言: 正文:   题单:【237题】算法基础精选题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 (nowcoder.com) NC50493 石子合并: NC50500 凸多边形的划分: NC235246 田忌赛马: NC13230 合并回文子串: NC16645 [NOIP2007]矩阵取数游戏: NC207781 迁徙

[信号与系统]模拟域中的一阶低通滤波器和二阶滤波器

前言 不是学电子出身的,这里很多东西是问了朋友… 模拟域中的一阶低通滤波器传递函数 模拟域中的一阶低通滤波器的传递函数可以表示为: H ( s ) = 1 s + ω c H(s) = \frac{1}{s + \omega_c} H(s)=s+ωc​1​ 这是因为一阶低通滤波器的设计目标是允许低频信号通过,同时衰减高频信号。具体来说,它的频率响应特性决定了这个形式的传递函数。 1.

求一列数一阶差分的和

数据是wdata(1:n) 我的做法是 a=0 for i=1:n-1 a=a+abs(wdata(i+1)-wdata(i)); end faruto的做法是 p1=wdata(1:n-1); p2=wdata(2:n); a=sum(abs(p2-p1));

偏微分方程算法之抛物型方程差分格式编程示例四(Richardson外推)

目录 一、研究问题 二、C++代码  三、结果分析 一、研究问题 已知其精确解为。分别取以下三种步长: ①

差分数组汇总

本文涉及知识点 算法与数据结构汇总 差分数组 令 a[i] = ∑ j : 0 i v D i f f [ i ] \sum_{j:0}^{i}vDiff[i] ∑j:0i​vDiff[i] 如果 vDiff[i1]++,则a[i1…]全部++ 如果vDiff[i2]–,则a[i2…]全部–。 令11 < i2 ,则: { a [ i ] 不变,不受加减影响 i < i 1 a [ i

【离散化 二维差分】850. 矩形面积 II

本文涉及知识点 离散化 二维差分 LeetCode850. 矩形面积 II 给你一个轴对齐的二维数组 rectangles 。 对于 rectangle[i] = [x1, y1, x2, y2],其中(x1,y1)是矩形 i 左下角的坐标, (xi1, yi1) 是该矩形 左下角 的坐标, (xi2, yi2) 是该矩形 右上角 的坐标。 计算平面中所有 rectangles 所覆盖的 总

空间双重差分模型案例

一、案例简介 使用空间双重差分模型研究中国“一带一路”政策对经济发展的影响效应。 二、变量选择 选取全国30个省(西藏缺失)2007-2017年面板数据,其中18个省为一带一路沿线省份(新疆、重庆、陕西、甘肃、宁夏、青海、内蒙古、黑龙江、吉林、辽宁、广西、云南、上海、福建、广东、浙江、海南等),作为实验组,地区虚拟变量设置为1,其余为对照组,设置为0,一带一路实施的时间为2014年,因此20

如何理解电流镜负载的差分对的增益

我们知道最普通的电阻负载的差分对的差分增益是-gmRD,如果我们不希望输出是双端的,而是希望单端输出,那么使用电阻负载的差分对会导致增益变为原先的一半,因此引入了电流镜负载的差分对,它可以在保证增益与原先相同的情况下,将输出从双端改为单端。下面是一个电流镜负载的差分对的基本结构。 我们可以看到只有Vout一个输出,接下来我们绘制它的小信号模型,短路电压源,断路电流源,此时观察Q1的MOS,给

导数应用(一):差分计算(导数)

导数应用(一):差分计算(导数) 1.数学背景2.代码 1.数学背景 导数: d y d x = y ( x i ) − y ( x i − 1 ) x i − x x − i \frac{dy}{dx} = \frac{y(x_i) - y(x_{i-1})}{x_i - x_{x-i}} dxdy​=xi​−xx−i​y(xi​)−y(xi−1​)​ 差分: Δ Y Δ X