操作1: 格式:1 x y k 含义:将区间 [x,y] 内每个数加上 k; 操作2: 格式:2 x 含义:输出第 x 个数的值。 输出格式 输出包含若干行整数,即为所有操作 2 的结果。 输入输出样例 输入#1 5 5 1 5 4 2 3 1 2 4 2 2 3 1 1 5 -1 1 3 5 7 2 4 输出#1 6 10 说明/提示 样例1 解释...
树状数组 https://oi-wiki.org/ds/fenwick/ 题目描述 这是一道模板题。 给出一个 n×m 的零矩阵 A,你需要完成如下操作: 1 x y k:表示元素 A_{x,y} 自增 k; 2 a b c d:表示询问左上角为 (a,b),右下角为 (c,d) 的子矩阵内所有数的和。 输入格式 输入的第一行有两个正整数 n, m;接...
对于区间修改,c [ i ] 依据 dis [ i ] = a [ i ] - a [ i - 1 ] 差分数组进行更新( 如果学过差分,那么对区间加减操作,可以在原数组的差分数组上操作 )。 单点查询,因为差分数组的前缀和就是原数组,所有对差分数组 getsum 就是原数组。 代码 // Problem: P3368 【模板】树状数组 2 // Conte...
1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含2或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k...
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入格式 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的
解题思路:前面已经讲过树状数组的单点修改,单点(区间)查询了。对于这道题要求的是区间修改,单点查询,怎么实现呢?首先来引入差分思想:假设原数组为A[],差分数组为d[],树状数组为C[](C数组和单点修改那个树状数组一样记录着某段区间的总和),则差分数组d[i]=A[i]-A[i-1](A[0]=0),即记录当前i位置的...
P3368 【模板】树状数组 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个
int n, m; void add(int x, long long num) { while (x <= n) { tree[x] += num; x += lowbit(x); } } long long query(int x) { long long ans = 0; while (x) { ans += tree[x]; x -= lowbit(x); } return ans; ...
树状数组模板2(洛谷例题P3368)(区间修改+单点查询) 例题:https://www.luogu.org/problem/show?pid=3368 上网看了别人家的讲解老半天。。。后来发现看的是区间修改加区间查询。。。 在树状数组的基础加上的差分在程序中具体有写。。 程序: #include<iostream>#include<cstdio>#include<cstdlib>usingnamespacestd...
树状数组(单点修改区间查询) http://106.12.15.69:85/index.php/archives/62/ 然后用到了差分数组 http://106.12.15.69:85/index.php/archives/64/ 代码 #include<bits/stdc++.h>usingnamespacestd;inttree[1000000];intcha[1000000];intm,n;intlowbit(intx){returnx&(-x); ...