傻瓜自助建站软件,数据库网页制作教程,什么是网络营销直播,兰州网站建设招聘信息#x1f339;作者:云小逸 #x1f4dd;个人主页:云小逸的主页 #x1f4dd;Github:云小逸的Github #x1f91f;motto:要敢于一个人默默的面对自己#xff0c;强大自己才是核心。不要等到什么都没有了#xff0c;才下定决心去做。种一颗树#xff0c;最好的时间是十年前… 作者:云小逸 个人主页:云小逸的主页 Github:云小逸的Github motto:要敢于一个人默默的面对自己强大自己才是核心。不要等到什么都没有了才下定决心去做。种一颗树最好的时间是十年前其次就是现在学会自己和解与过去和解努力爱自己。希望春天来之前我们一起面朝大海春暖花开 专栏C 专栏Java语言 专栏C语言初阶专栏数据结构 文章目录前言改变数组元素【一维差分】题目输入格式输出格式数据范围输入样例输出样例题目分析代码代码讲解1.memset函数2.边界的代换3.一维差分的模版差分矩阵【二维差分】题目输入格式输出格式数据范围输入样例输出样例题目分析核心思想【二维差分】代码最后前言
今天这篇文章是接着上一篇文章【差分】展开说差分在题目中的妙用。如有错误请私信告知望见谅 ——————————————————————————————
首先先写上几句话献给坚持创作的我和点开这篇文章希望进步的你
1.人一旦堕落上帝就会以更快的速度收走你的天赋和力量。
2.这些年我一直提醒自己一件事情千万不要自己感动自己。大部分人看似的努力不过是愚蠢导致的。什么熬夜看书到天亮连续几天只睡几小时多久没放假了如果这些东西也值得夸耀那么富士康流水线上任何一个人都比你努力多了。 人难免天生有自怜的情绪唯有时刻保持清醒才能看清真正的价值在哪里。 ———于宙《我们这一代人的困惑》 3.改变自己不要用力过猛最好从小事开始。 比如说点个赞打败你的拖延症。
4、我始终认为一个人可以很天真简单的活下去必是身边无数人用大的代价守护而来的。 ——《小王子》
5、如果你真的想做一件事情那么就算障碍重重你也会想尽一切办法去办到它。但若是你不是真心的想要去完成一件事情那么纵使前方道路平坦你也会想尽一切理由阻止自己向前。
改变数组元素【一维差分】
题目
给定一个空数组 V 和一个整数数组 a1,a2,…,an。现在要对数组 V 进行 n 次操作。 第 i 次操作的具体流程如下 从数组 V 尾部插入整数 0。 将位于数组 V 末尾的 ai 个元素都变为 1已经是 1 的不予理会。 注意 ai 可能为 0即不做任何改变。 ai 可能大于目前数组 V 所包含的元素个数此时视为将数组内所有元素变为 1。 请你输出所有操作完成后的数组 V。
输入格式
第一行包含整数 T表示共有 T 组测试数据。每组数据第一行包含整数 n。
第二行包含 n 个整数 a1,a2,…,an。
输出格式
每组数据输出一行结果表示所有操作完成后的数组 V数组内元素之间用空格隔开。
数据范围
1≤T≤20000, 1≤n≤2×105, 0≤ai≤n, 保证一个测试点内所有 n 的和不超过 2×105。
输入样例 3 6 0 3 0 0 1 3 10 0 0 0 1 0 5 0 0 0 2 3 0 0 0 输出样例 1 1 0 1 1 1 0 1 1 1 1 1 0 0 1 1 0 0 0 题目分析
可能你读完题一下子没有理解是什么意思没事接下来这张动图便于你的理解 希望看完这个动图你能理解这个题目 其实我们可以从题目这句话入手进行解题 在这个数组内看这个数是0还是1可以看这个数被操作的次数如果操作0次则是0操作不是0次则是1.
代码
#includeiostream
#includecstring
#includealgorithmusing namespace std;
const int N200010;int n;
int b[N];int main()
{int T;scanf(%d,T);while(T--){scanf(%d,n);memset(b,0,(n1)*4);for(int i1;in;i){int a;scanf(%d,a);int lmax(1,i-a1),ri;b[l];b[r1]--;}for(int i1;in;i){b[i]b[i-1];cout!!b[i] ;}puts( );}return 0;
}代码讲解
1.memset函数 上面是memset函数的官方解释。 这里使用memset要注意,因为这里的测试数据比较大如果直接初始化代码可能过不了因此要么使用for循环要么使用memset只初始化前n1的数据也是可以的。
2.边界的代换 3.一维差分的模版 差分矩阵【二维差分】
题目
输入一个 n 行 m 列的整数矩阵再输入 q 个操作每个操作包含五个整数 x1,y1,x2,y2,c其中 (x1,y1) 和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。 每个操作都要将选中的子矩阵中的每个元素的值加上 c。 请你将进行完所有操作后的矩阵输出。
输入格式
第一行包含整数 n,m,q。 接下来 n 行每行包含 m 个整数表示整数矩阵。
接下来 q 行每行包含 5 个整数 x1,y1,x2,y2,c表示一个操作。
输出格式
共 n 行每行 m 个整数表示所有操作进行完毕后的最终矩阵。
数据范围
1≤n,m≤1000, 1≤q≤100000, 1≤x1≤x2≤n , 1≤y1≤y2≤m, −1000≤c≤1000, −1000≤矩阵内元素的值≤1000
输入样例 3 4 3 1 2 2 1 3 2 2 1 1 1 1 1 1 1 2 2 1 1 3 2 3 2 3 1 3 4 1 输出样例 2 3 4 1 4 3 4 1 2 2 2 2 题目分析
这道题目的意思是给定原矩阵a[][],构造差分矩阵b[][]使得a[][]是b[][]的二维前缀和。 即a[i][j]是b[1][1]到b[i][j]的矩阵就是下图的意思。
核心思想【二维差分】
以x1,x2为左上角x2,y2为右上角的子矩阵中的所有数a[i][j]加上C常数 如 b[x1][y1] c;b[x2 1][y1] - c;b[x1][y2 1] - c;b[x2 1][y2 1] c;代码
#include iostreamusing namespace std;const int N 1010;int n, m, q;
int a[N][N], b[N][N];void insert(int x1, int y1, int x2, int y2, int c)
{b[x1][y1] c;b[x2 1][y1] - c;b[x1][y2 1] - c;b[x2 1][y2 1] c;
}int main()
{scanf(%d%d%d, n, m, q);for (int i 1; i n; i )for (int j 1; j m; j )scanf(%d, a[i][j]);for (int i 1; i n; i )for (int j 1; j m; j )insert(i, j, i, j, a[i][j]);while (q -- ){int x1, y1, x2, y2, c;cin x1 y1 x2 y2 c;insert(x1, y1, x2, y2, c);}for (int i 1; i n; i )for (int j 1; j m; j )b[i][j] b[i - 1][j] b[i][j - 1] - b[i - 1][j - 1];for (int i 1; i n; i ){for (int j 1; j m; j ) printf(%d , b[i][j]);puts();}return 0;
}
最后
十分感谢你可以耐着性子把它读完和我可以坚持写到这里送几句话对你也对我
1.任何寻求安慰的行为都不会让你成长宿醉、旅行、痛哭流涕、甚至和朋友的促膝长谈都只是让你感觉安全、良好 成长其实是特别艰难的自省你必须抛弃所有说给别人和自己听的漂亮话正视你的无能与不可得甚至一遍一遍被怨恨愤怒及嫉妒撂倒然后你才懂得成长无关改变只是学会选择你能承受的。
2.以前我觉得成绩不重要。清华 、北大、复旦、交大 只能代表学生时代的成就。后来我发现努力是种习惯它会贯穿终生。 3.除了自身的病患或亲友离去的痛苦是真实的其他的痛苦都是你自己的价值观带给你的。
4、当你觉得自己想要死去时你真的不是真想死你只是不想这样活着。
5、你无所依靠事必靠己。很多很多的钱以及很多很多的爱你都可以自己给自己。自己给自己的安全感才最踏实你的努力永远不会背叛你。
最后如果觉得我写的还不错请不要忘记点赞✌收藏✌加关注✌哦(ω)
愿我们一起加油奔向更美好的未来愿我们从懵懵懂懂的一枚菜鸟逐渐成为大佬。加油为自己点赞