洛谷OJ P3368 【模板】树状数组 2
题目链接:https://www.luogu.org/problemnew/show/P3368
题目思路:区间更新,单点查询模板题,树状数组做法
AC代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<queue>
#include<stack>
#include<map>using namespace std;#define FOU(i,x,y) for(int i=x;i<=y;i++)
#define FOD(i,x,y) for(int i=x;i>=y;i--)
#define MEM(a,val) memset(a,val,sizeof(a))
#define PI acos(-1.0)const double EXP = 1e-9;
typedef long long ll;
typedef unsigned long long ull;
const int INF = 0x3f3f3f3f;
const ll MINF = 0x3f3f3f3f3f3f3f3f;
const double DINF = 0xffffffffffff;
const int mod = 1e9+7;
const int N = 1e6+5;//一维树状数组区间修改,单点查询
//原来的值存在a[]里面,多建立个数组c1[](代码中用tree数组表示),注意:c1[i]=a[i]-a[i-1]。
//那么求a[i]的值的时候a[i]=a[i-1]+c1[i]=a[i-2]+c1[i]+c1[i-1]=…..=c1[1]+c1[2]+…+c1[i]。
int a[N],tree[N];
int n;
int lowbit(int x){return x&(-x);}
void updata(int x,int val){ //单点更新while(x<=n){tree[x]+=val;x+=lowbit(x);}
}
void regionUpdata(int x,int y,int val){ //区间更新,实现a[x]~a[y]+valupdata(x,val);updata(y+1,-val);
}
int pointQuery(int x){ //单点查询,因为tree数组是差分数组,所以a[x]=tree[1]+tree[2]+...+tree[x]int ans=0;while(x>0){ans+=tree[x];x-=lowbit(x);}return ans;
}
void init(){a[0]=0;for(int i=1;i<=n;i++){updata(i,a[i]-a[i-1]); //用差分数组初始化树状数组}
}int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);std::ios::sync_with_stdio(false);int q,x,y,val,typ;scanf("%d%d",&n,&q);for(int i=1;i<=n;i++)scanf("%d",&a[i]);init();while(q--){scanf("%d",&typ);if(typ==1){scanf("%d%d%d",&x,&y,&val);regionUpdata(x,y,val);}else{scanf("%d",&x);printf("%d\n",pointQuery(x));}}return 0;
}
洛谷OJ P3368 【模板】树状数组 2相关推荐
- 洛谷 - P2617 Dynamic Rankings(树状数组套主席树)
题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a,再给出 m 次操作: Q l r k:返回区间 [ l , r ] 内第 k 大的数 C x y:令 a[ x ] = y 题目分析:其实 ...
- 洛谷 P2357 守墓人(树状数组)
树状数组区间更新,区间查询的入门好题 const int N=2e5+5;int i,j,k;int n,m,t;ll a[N]; ll c[N][2];ll sum[N];void add(int ...
- [算法模板]树状数组
[算法模板]树状数组 思路 图片转自:yhf_2015--彻底理解树状数组 使用这个图片就能很快的理解树状数组. 我们可以先根据图片来分解一个十进制数成二次幂. example: \(15=2^0+1 ...
- 【luogu3368】模板 树状数组 2
题面 已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 题解1 单点查询+区间修改. -.-说了树状数组模板那就用树状数组. 树状数组维护差分数列即可(差分前 ...
- 【luogu3374】模板 树状数组 1
题面 已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 题解1 单点修改+区间查询. 关于树状数组的理解,补上一点.位运算的操作其实对应的就是任意一个整数在二进 ...
- 模板——树状数组求逆序对
题目链接:https://www.luogu.org/problemnew/show/P1908 1 #include <map> 2 #include <set> 3 #in ...
- 模板三连击:树状数组+线段树+主席树
没事儿干,复习模板...... 1.树状数组 本来不想写这个的,但是反正就几分钟就打完了,所以就写了,水AC数. 洛谷 P3374 [模板]树状数组 1 1 #include<cstdio> ...
- 0x42.数据结构进阶 - 树状数组
目录 一.树状数组与逆序对 A.luogu P1908 逆序对(模板题) B.AcWing 241. 楼兰图腾 树状数组的拓展应用 1.区间加,求单点值 A.AcWing 242. 一个简单的整数问题 ...
- 洛谷P3368 【模板】树状数组 2(Python和C++代码)
##就是常规写法 用树状数组维护一个差分数组的前缀和,因为可推得若b[i]=a[i]-a[i-1],则a[i]=b[1]+-+b[i] (b[1]=a[1]-a[0],a[0]=0) . 可发现a[i ...
- 洛谷P3374 【模板】树状数组 1
题目链接:[模板]树状数组 1 - 洛谷 模板题就不多说了 ac代码: #include <cstdio> #include <iostream> #include <a ...
最新文章
- 丢弃Transformer,FCN也可以实现E2E检测
- 4个做管理后才知道的秘密
- Python进阶2——向量模拟
- 观看5万个游戏视频后,英伟达AI学会了自己开发「吃豆人」
- 033_webpack打包ES6模块化工程
- 蓝牙驱动卸载后自动安装_智能产品 | 安装水循环系统后,全自动洗车机洗车会更节水吗?...
- saltstack 安装nginx
- 蓝桥杯基础模块3_1:数码管静态显示
- 解决 wildfly(jboss) 启动报错:'findstr' 不是内部或外部命令
- IE各浏览器HACK
- vue多个html传递参数,vue 项目@change多个参数传值多个事件的操作
- SitePoint播客#114:在WordCamp Raleigh上直播第1部分
- wifi6无线网卡驱动linux,ROG R6E Omega换wifi 6无线网卡教程
- 路由器配置vlan桥接
- Apache(阿帕奇) 配置环境及使用(保姆级教程)拒绝繁琐
- scratch 编程 + 小学数学
- 中资美元债这么膨胀,个人投资者怎么买?
- NGINX工作原理解析
- android 定位轨迹功能,小步外勤怎么看轨迹 定位轨迹功能详解
- Vim快速移动光标至行首和行尾 、第一行和最后一行