poj3468区间加减查找——树状数组区间修改查询
题目:http://poj.org/problem?id=3468
增加一个更改量数组,施以差值用法则区间修改变为单位置修改;
利用公式可通过树状数组维护两个数组:f与g而直接求出区间和。
代码如下:
- #include<iostream>
- #include<cstdio>
- using namespace std;
- long long n,q,a[100005]/*,b[100005],bg[100005]*/,l,r,ad;
- long long f[100005],g[100005],sum[100005];//f[x]为更改量
- char dc;
- long long query(long long x)
- {
- long long k=x;
- long long summ=0;
- for(;x;x-=x&-x)
- summ+=f[x];
- long long s2=0;
- x=k;
- for(;x;x-=x&-x)
- s2+=g[x];
- return (k+1)*summ-s2;
- }
- void add(long long x,long long y)//x单位置增加y
- {
- long long k=x;
- for(x;x<=n;x+=x&-x)
- f[x]+=y,g[x]+=k*y;
- }
- int main()
- {
- scanf("%lld%lld",&n,&q);
- for(long long i=1;i<=n;i++)
- {
- scanf("%lld",&sum[i]);
- sum[i]+=sum[i-1];
- // b[i]=a[i]-a[i-1];
- // for(int j=i-(i&-i)+1;j<=i;j++)f[i]+=b[j];//差值
- // bg[i]=i*b[i];
- // for(int j=i-(i&-i)+1;j<=i;j++)g[i]+=bg[j];
- // g[i]=i*f[i];
- }
- for(long long i=1;i<=q;i++)
- {
- scanf(" %c",&dc);
- if(dc=='C')
- {
- scanf("%lld%lld%lld",&l,&r,&ad);
- add(l,ad);add(r+1,-ad);
- }
- if(dc=='Q')
- {
- scanf("%lld%lld",&l,&r);
- long long ans=query(r)+sum[r]-query(l-1)-sum[l-1];
- printf("%lld\n",ans);
- }
- }
- return 0;
- }
poj3468区间加减查找——树状数组区间修改查询的更多相关文章
- 【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...
- 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树状数组套主席树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 首先还是吐槽时间,我在zoj交无限tle啊!!!!!!!!我一直以为是程序错了啊啊啊啊啊啊. ...
- hdu 5869 区间不同GCD个数(树状数组)
Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- 树状数组区间加法&区间求和操作
树状数组区间加法&区间求和操作 一般的树状数组解决区间加&单点询问并不复杂 但是要解决区间求和... 我们假设原数组是\(\{a_i\}\),差分数组\(\{d_i=a_i-a_{i- ...
- 【bzoj5173】[Jsoi2014]矩形并 扫描线+二维树状数组区间修改区间查询
题目描述 JYY有N个平面坐标系中的矩形.每一个矩形的底边都平行于X轴,侧边平行于Y轴.第i个矩形的左下角坐标为(Xi,Yi),底边长为Ai,侧边长为Bi.现在JYY打算从这N个矩形中,随机选出两个不 ...
- 【bzoj3132】上帝造题的七分钟 二维树状数组区间修改区间查询
题目描述 “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作. ...
- 【bzoj4540】[Hnoi2016]序列 单调栈+离线+扫描线+树状数组区间修改区间查询
题目描述 给出一个序列,多次询问一个区间的所有子区间最小值之和. 输入 输入文件的第一行包含两个整数n和q,分别代表序列长度和询问数.接下来一行,包含n个整数,以空格隔开,第i个整数为ai,即序列第i ...
- 【poj2155】Matrix(二维树状数组区间更新+单点查询)
Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...
- 【bzoj3779】重组病毒 LCT+树上倍增+DFS序+树状数组区间修改区间查询
题目描述 给出一棵n个节点的树,每一个节点开始有一个互不相同的颜色,初始根节点为1. 定义一次感染为:将指定的一个节点到根的链上的所有节点染成一种新的颜色,代价为这条链上不同颜色的数目. 现有m次操作 ...
随机推荐
- ASP.NET MVC路径引用总结
1.关于路径: (1)绝对路径 包含站点路径的路径:<a href=”http://www.baidu.com/about.jpg”>百度</a> 站点改变路径失效: (2)相 ...
- PHP中__get()和__set()的用法实例详解
php面向对象_get(),_set()的用法 一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__ge ...
- Linux下实现RAID
一.实验目的 1.掌握Linux系统下软RAID的实现方法: 2.掌握RAID5的配置过程: 3. 通过实验熟悉RAID.5的特点. 二.实验内容及步骤 1.在VMware中创建一台Linux. 2. ...
- MySQL技术内幕InnoDB存储引擎(表&索引算法和锁)
表 4.1.innodb存储引擎表类型 innodb表类似oracle的IOT表(索引聚集表-indexorganized table),在innodb表中每张表都会有一个主键,如果在创建表时没有显示 ...
- doT.js具体使用介绍
官网: http://olado.github.iodoT.js具体使用介绍 用法: {{= }} for interpolation {{ }} for evaluation {{~ }} for ...
- 【BZOJ2654】tree 二分+最小生成树
[BZOJ2654]tree Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need ...
- 九度OJ 1039:Zero-complexity Transposition(逆置) (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3093 解决:1255 题目描述: You are given a sequence of integer numbers. Zero-co ...
- redis自启动
$ vi /etc/init.d/redis # chkconfig: 2345 90 10 # description: Redis is a persistent key-value databa ...
- Android之ProgressBar读取文件进度解析
ProgressBar进度条, 分为旋转进度条和水平进度条,进度条的样式根据需要自定义,之前一直不明白进度条如何在实际项目中使用,网上演示进度条的案例大多都是通过Button点 击增加.减少进度值,使 ...
- centos 7 官网安装 PostgreSQL
https://www.postgresql.org/download/linux/redhat/