题目链接: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相关推荐

  1. 洛谷 - P2617 Dynamic Rankings(树状数组套主席树)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a,再给出 m 次操作: Q l r k:返回区间 [ l , r ] 内第 k 大的数 C x y:令 a[ x ] = y 题目分析:其实 ...

  2. 洛谷 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 ...

  3. [算法模板]树状数组

    [算法模板]树状数组 思路 图片转自:yhf_2015--彻底理解树状数组 使用这个图片就能很快的理解树状数组. 我们可以先根据图片来分解一个十进制数成二次幂. example: \(15=2^0+1 ...

  4. 【luogu3368】模板 树状数组 2

    题面 已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 题解1 单点查询+区间修改. -.-说了树状数组模板那就用树状数组. 树状数组维护差分数列即可(差分前 ...

  5. 【luogu3374】模板 树状数组 1

    题面 已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 题解1 单点修改+区间查询. 关于树状数组的理解,补上一点.位运算的操作其实对应的就是任意一个整数在二进 ...

  6. 模板——树状数组求逆序对

    题目链接:https://www.luogu.org/problemnew/show/P1908 1 #include <map> 2 #include <set> 3 #in ...

  7. 模板三连击:树状数组+线段树+主席树

    没事儿干,复习模板...... 1.树状数组 本来不想写这个的,但是反正就几分钟就打完了,所以就写了,水AC数. 洛谷 P3374 [模板]树状数组 1 1 #include<cstdio> ...

  8. 0x42.数据结构进阶 - 树状数组

    目录 一.树状数组与逆序对 A.luogu P1908 逆序对(模板题) B.AcWing 241. 楼兰图腾 树状数组的拓展应用 1.区间加,求单点值 A.AcWing 242. 一个简单的整数问题 ...

  9. 洛谷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 ...

  10. 洛谷P3374 【模板】树状数组 1

    题目链接:[模板]树状数组 1 - 洛谷 模板题就不多说了 ac代码: #include <cstdio> #include <iostream> #include <a ...

最新文章

  1. 丢弃Transformer,FCN也可以实现E2E检测
  2. 4个做管理后才知道的秘密
  3. Python进阶2——向量模拟
  4. 观看5万个游戏视频后,英伟达AI学会了自己开发「吃豆人」
  5. 033_webpack打包ES6模块化工程
  6. 蓝牙驱动卸载后自动安装_智能产品 | 安装水循环系统后,全自动洗车机洗车会更节水吗?...
  7. saltstack 安装nginx
  8. 蓝桥杯基础模块3_1:数码管静态显示
  9. 解决 wildfly(jboss) 启动报错:'findstr' 不是内部或外部命令
  10. IE各浏览器HACK
  11. vue多个html传递参数,vue 项目@change多个参数传值多个事件的操作
  12. SitePoint播客#114:在WordCamp Raleigh上直播第1部分
  13. wifi6无线网卡驱动linux,ROG R6E Omega换wifi 6无线网卡教程
  14. 路由器配置vlan桥接
  15. Apache(阿帕奇) 配置环境及使用(保姆级教程)拒绝繁琐
  16. scratch 编程 + 小学数学
  17. 中资美元债这么膨胀,个人投资者怎么买?
  18. NGINX工作原理解析
  19. android 定位轨迹功能,小步外勤怎么看轨迹 定位轨迹功能详解
  20. Vim快速移动光标至行首和行尾 、第一行和最后一行

热门文章

  1. Java常用到的快捷键
  2. msdev.exe 应用程序错误的解决方法
  3. kettle资源库总是断开
  4. EXCEL 常用的宏代码大全
  5. vmlinux vmlinuz zimage uimage 区别
  6. 在Windows server 2019 Core 版本上安装SQL2016
  7. 中鸣机器人编程教程 c 语言,中鸣教育机器人简介.doc
  8. python多态实例_Python多态实例详解
  9. PostgreSQL命令导入sql文件
  10. 《数据结构:c语言版》(严蔚敏)知识点整合