#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
using namespace std;
const int N = (int)1e6 + 5; int n, m;
struct Q{
int type, id;
long long val;
friend bool operator < (Q x, Q y){
return x.id == y.id ? x.type < y.type : x.id < y.id;
}
}q[N], tmp[N];
int qsize;
long long ans[N];
int asize; void cdq(int l, int r){//左闭右开
if(r - l <= 1) return ;//长度为1的区间内部就不会有贡献了
int mid = l + ((r - l) >> 1);
cdq(l, mid); cdq(mid, r);
long long sum = 0;
int i = l, j = mid, tsize = 0;
//合并并计算左区间对右区间贡献
while(i < mid && j < r){
if(q[i] < q[j]){
if(q[i].type == 1) sum += q[i].val;
tmp[++tsize] = q[i++];
}
else {
if(q[j].type == 2) ans[q[j].val] -= sum;
else if(q[j].type == 3) ans[q[j].val] += sum;
tmp[++tsize] = q[j++];
}
}
while(i < mid) tmp[++tsize] = q[i++];
while(j < r){
if(q[j].type == 2) ans[q[j].val] -= sum;
else if(q[j].type == 3) ans[q[j].val] += sum;
tmp[++tsize] = q[j++];
}
for(int i = 1; i <= tsize; ++i) q[l + i - 1] = tmp[i];
} /*
这部分的思路总结 判断是否到边界
下方左右分治
计算左边对右边的贡献
把左右类似归并排序重排 */ int main() {
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i){
++qsize;
q[qsize].id = i, q[qsize].type = 1;
scanf("%lld", &q[qsize].val);
}
for(int i = 1; i <= m; ++i){
scanf("%d", &q[++qsize].type);
if(q[qsize].type == 1){
scanf("%d%lld", &q[qsize].id, &q[qsize].val);
}
else {
int l, r; scanf("%d%d", &l, &r);
++asize;
q[qsize].id = l - 1, q[qsize].val = asize;
q[++qsize].id = r, q[qsize].type = 3, q[qsize].val = asize;
}
}
cdq(1, qsize + 1);
for(int i = 1; i <= asize; ++i) printf("%lld\n", ans[i]);
return 0;
}

【模板】cdq分治代替树状数组(单点修改,区间查询)的更多相关文章

  1. HDU 1166 敌兵布阵 (树状数组 单点修改+区间查询)

    题目链接 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和T ...

  2. [APIO2019] [LOJ 3146] 路灯 (cdq分治或树状数组套线段树)

    [APIO2019] [LOJ 3146] 路灯 (cdq分治或树状数组套线段树) 题面 略 分析 首先把一组询问(x,y)看成二维平面上的一个点,我们想办法用数据结构维护这个二维平面(注意根据题意这 ...

  3. hdu 2642二维树状数组 单点更新区间查询 模板题

    二维树状数组 单点更新区间查询 模板 从零开始借鉴http://www.2cto.com/kf/201307/227488.html #include<stdio.h> #include& ...

  4. bzoj 1176 cdq分治套树状数组

    题面: 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. Inp ...

  5. TZOJ 2725 See you~(二维树状数组单点更新区间查询)

    描述 Now I am leaving hust acm. In the past two and half years, I learned so many knowledge about Algo ...

  6. 【bzoj3132】上帝造题的七分钟 二维树状数组区间修改区间查询

    题目描述 “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作. ...

  7. 【bzoj5173】[Jsoi2014]矩形并 扫描线+二维树状数组区间修改区间查询

    题目描述 JYY有N个平面坐标系中的矩形.每一个矩形的底边都平行于X轴,侧边平行于Y轴.第i个矩形的左下角坐标为(Xi,Yi),底边长为Ai,侧边长为Bi.现在JYY打算从这N个矩形中,随机选出两个不 ...

  8. 【bzoj4540】[Hnoi2016]序列 单调栈+离线+扫描线+树状数组区间修改区间查询

    题目描述 给出一个序列,多次询问一个区间的所有子区间最小值之和. 输入 输入文件的第一行包含两个整数n和q,分别代表序列长度和询问数.接下来一行,包含n个整数,以空格隔开,第i个整数为ai,即序列第i ...

  9. 【bzoj3779】重组病毒 LCT+树上倍增+DFS序+树状数组区间修改区间查询

    题目描述 给出一棵n个节点的树,每一个节点开始有一个互不相同的颜色,初始根节点为1. 定义一次感染为:将指定的一个节点到根的链上的所有节点染成一种新的颜色,代价为这条链上不同颜色的数目. 现有m次操作 ...

  10. bzoj 4991 [Usaco2017 Feb]Why Did the Cow Cross the Road III(cdq分治,树状数组)

    题目描述 Farmer John is continuing to ponder the issue of cows crossing the road through his farm, intro ...

随机推荐

  1. Tea Party CodeForces - 808C (构造+贪心)

    Polycarp invited all his friends to the tea party to celebrate the holiday. He has ncups, one for ea ...

  2. 解决object at 0x01DB75F0

    python在学习过程中吗,由于常常会出现代码运行没报错,但输出的却不是我们想要的结果(图表,列表等等),而出现类似 <filter object at 0x01DB75F0>的情况,比如 ...

  3. pandas删除某一列的方法

    方法一:直接del df['column-name'] 删除sub_grade_列, 输入del df['sub_grade_x'] 方法二:采用drop方法,有下面三种等价的表达式: 1. df= ...

  4. 阿里云服务器使用镜像市场上的环境以后sql不能远程问题

    关于阿里云的服务器,首先要说的就是买了以后是没有环境的,什么都需要自己配置,也是在这个上面栽了很多跟头最后去的镜像市场买的一个IIS8+SQL2016的asp.net环境 怎么说呢,感觉有些问题的本源 ...

  5. javac与java版本不一致

    项目测试时遇到该问题,因为loadRunner不支持jdk1.7,但运行java脚本时提示jdk版本是1.7,实际的JAVA_HOME设置为1.6. 运行javac -version与java -ve ...

  6. CSS响应式布局实例

    <style type="text/css">        body{            margin:0 auto;            min-width: ...

  7. [转帖]震惊,用了这么多年的 CPU 利用率,其实是错的

    震惊,用了这么多年的 CPU 利用率,其实是错的 2018年12月22日 08:43:09 Linuxer_ 阅读数:50 https://blog.csdn.net/juS3Ve/article/d ...

  8. [转帖]迎战AMD 7nm 64核EPYC 英特尔至强也玩起了胶水以及性价比

    迎战AMD 7nm 64核EPYC 英特尔至强也玩起了胶水以及性价比 Intel 最强CPU 从最开始的双核 到现在的 28核 发展迅猛. https://www.cnbeta.com/article ...

  9. [转帖]利用hydra(九头蛇)暴力破解内网windows登录密码

    利用hydra(九头蛇)暴力破解内网windows登录密码 https://blog.csdn.net/weixin_37361758/article/details/77939070 尝试了下 能够 ...

  10. logback框架之——日志分割所带来的潜在问题

    源码: logback-test.xml文件如下,有2个需要我们重点关注的参数: fileNamePattern:这里的日志文件名变动的部分是年月日时,外加1个文件分割自增变量,警告,年月日时的数值依 ...