#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. Python学习第三篇——访问列表部分元素

    dongman =["huoying","sishen","si wang bi ji","pan ni de lu lu xiu ...

  2. 【M2】软件工程终期总结报告——前端设计总结

    PhylabWeb——前端设计感想 简介 本文的内容是关于我参与的软件工程项目——“Phylab-Web物理实验中心网站”的前端设计个人总结,来自团队:软剑攻城队 网站地址为:http://buaap ...

  3. Continued Fractions CodeForces - 305B (java+高精 / 数学)

    A continued fraction of height n is a fraction of form . You are given two rational numbers, one is ...

  4. P124黎曼可积性刻画 的两个备注

    1.这里为什么是开集?   2.请问为什么说了是开集马上就说是有界可测函数? 开集为可测集

  5. 学习 yii2.0——视图之间相互包含

    布局 首先创建一个布局文件simple.php,路径是在views/layout/目录下. <p>this is header</p> <?= $content ?> ...

  6. python中$和@基础笔记

    python 2.4以后,增加了@符号修饰函数对函数进行修饰,python3.0/2.6又增加了对类的修饰. $ 在正则表达式中,匹配一个字符串的末尾.(参考http://www.runoob.com ...

  7. C#的修饰符

    C#的修饰符 废话少说,直接上总结: 一.在命名空间下: 类:默认修饰符为internal 接口:默认的修饰符为internal 结构体:默认的修饰符为internal 枚举:默认的修饰符为inter ...

  8. 【学亮IT手记】PL/SQL游标编程

    游标提供了一种从表中检索数据并进行操作的灵活手段,主要用在服务器上,处理由客户端发送给服务器端的sql语句,或者是批处理.存储过程.触发器中的数据处理请求. 显式游标 是由用户声明和操作的一种游标,通 ...

  9. spring的xml配置里,最好不要配置xsd的版本名称

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  10. Day 4-4 shutil模块

    常用方法: import shutil f = open("conf.ini", "r") f1 = open("shutil.ini", ...