原题

给出W×W的矩阵(S没有用,题目有误),给出无限次操作,每次操作的含义为:
输入1:你需要把(x,y)(第x行第y列)的格子权值增加a
输入2:你需要求出以左下角为(x1,y1),右上角为(x2,y2)的矩阵内所有格子的权值和,并输出
输入3:表示输入结束


因为修改之间相互独立,所以可以用CDQ。
三个维度分别为时间,x轴,y轴。
简单的三维偏序即可。

#include<cstdio>
#include<algorithm>
#define N 200010
using namespace std;
struct hhh
{int x,y,w,pos,id,op;bool operator < (const hhh &b) const{if (x==b.x && y==b.y) return op<b.op;if (x==b.x) return y<b.y;return x<b.x;}
}q[N],tmp[N];
int s,w,n,ans[N],m,op,f[10*N];int read()
{int ans=0,fu=1;char j=getchar();for (;j<'0' || j>'9';j=getchar()) if (j=='-') fu=-1;for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';return ans*fu;
}void addquery()
{int lx=read(),ly=read(),rx=read(),ry=read();int pos=++ans[0];q[++m].pos=pos;q[m].id=m;q[m].x=lx-1;q[m].y=ly-1;q[m].w=1;q[m].op=1;q[++m].pos=pos;q[m].id=m;q[m].x=rx;q[m].y=ry;q[m].w=1;q[m].op=1;q[++m].pos=pos;q[m].id=m;q[m].x=lx-1;q[m].y=ry;q[m].w=-1;q[m].op=1;q[++m].pos=pos;q[m].id=m;q[m].x=rx;q[m].y=ly-1;q[m].w=-1;q[m].op=1;
}void add(int x,int y)
{while (x<=w){f[x]+=y;x+=x&-x;}
}int query(int x)
{int ans=0;while (x){ans+=f[x];x-=x&-x;}return ans;
}void CDQ(int l,int r)
{if (l==r) return ;int mid=(l+r)>>1,i=l,j=mid+1;for (int k=l;k<=r;k++){if (q[k].id<=mid && !q[k].op)add(q[k].y,q[k].w);if (q[k].id>mid && q[k].op)ans[q[k].pos]+=q[k].w*query(q[k].y);}for (int k=l;k<=r;k++)//清空树状数组if (q[k].id<=mid && !q[k].op) add(q[k].y,-q[k].w);for (int k=l;k<=r;k++)if (q[k].id<=mid) tmp[i++]=q[k];else tmp[j++]=q[k];for (int k=l;k<=r;k++)q[k]=tmp[k];CDQ(l,mid);CDQ(mid+1,r);
}int main()
{s=read();w=read();while (1){op=read();if (op==1){q[++m].x=read();q[m].y=read();q[m].w=read();q[m].id=m;}else if (op==2)addquery();else break;}sort(q+1,q+m+1);CDQ(1,m);for (int i=1;i<=ans[0];i++)printf("%d\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/mrha/p/8057667.html

[bzoj] 1176 Mokia || CDQ分治相关推荐

  1. bzoj 1176 Mokia (cdq分治)

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MB Submit: 3874  Solved: 1742 [Submit] ...

  2. BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )

    考虑cdq分治, 对于[l, r)递归[l, m), [m, r); 然后计算[l, m)的操作对[m, r)中询问的影响就可以了. 具体就是差分答案+排序+离散化然后树状数组维护.操作数为M的话时间 ...

  3. BZOJ 4285 使者 (CDQ分治+dfs序)

    题目传送门 题目大意:给你一棵树,有三种操作,在两个点之间连一个传送门,拆毁一个已有的传送门,询问两个点之间的合法路径数量.一条合法路径满足 1.经过且仅经过一个传送门 2.不经过起点终点简单路径上的 ...

  4. bzoj 4237: 稻草人 cdq分治

    求有多少个点对  其一个点为左下角  一个点为右下角所形成的矩形内部没有点 每个x与y都不同 一开始的思路: 先按照x坐标排序  进行cdq分治 然后在cdq内对y进行排序  枚举mid+1-r的点作 ...

  5. BZOJ 1176([Balkan2007]Mokia-CDQ分治-分治询问)

    1176: [Balkan2007]Mokia Time Limit: 30 Sec   Memory Limit: 162 MB Submit: 185   Solved: 94 [ Submit] ...

  6. bzoj 2141 : 排队 (cdq分治+bit)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2141 思路: 其实就是求动态逆序对...cdq降维,用树状数组前后求两遍逆序对就好了 切水 ...

  7. BZOJ 1176[Balkan2007]Mokia (cdq分治,矩阵加矩阵求和)

    BZOJ 1176[Balkan2007]Mokia (cdq分治,矩阵加矩阵求和) Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值. ...

  8. cdq分治(bzoj 1176: [Balkan2007]Mokia bzoj 2683: 简单题)

    CDQ分治: 本质:对询问进行分治 优点:和莫队分块一样都属于技巧,关键时刻能免去复杂的数据结构,常数小 缺点:必须离线 参考:http://blog.csdn.net/hbhcy98/article ...

  9. BZOJ 1176: [Balkan2007]Mokia

    一道CDQ分治的模板题,然而我De了一上午Bug...... 按时间分成左右两半,按x坐标排序然后把y坐标丢到树状数组里,扫一遍遇到左边的就add,遇到右边的query 几个弱智出了bug的点, 一是 ...

最新文章

  1. qooxdoo学习笔记一
  2. Mysql 8 group replication组复制集群单主配置图解
  3. 阿里云张献涛:自主最强DPU神龙的秘诀
  4. Android的ListFragment和Fragment的使用
  5. 用c语言elgamal共密钥密码加密算法,非对称密钥体制RSA加密原理
  6. Oracle→序列、视图、索引、存储过程、存储函数、包、触发器、表分区、锁表解锁表、事务、PLSQL、备份恢复、游标
  7. python输出文件夹路径_python如何获取文件夹下第一层文件的路径,
  8. Apple原装扫描二维码指定区域
  9. 都在说视频号,真有机会?
  10. 学习python的感受
  11. 北京智和信通受邀出席2022IT运维大会,荣获“2022智能运维星耀榜最具影响力企业”
  12. fiddler手机抓包配置代理后没有网络(手机不能上网)
  13. Pycharm中用Appium框架编写第一个自动化脚本
  14. 《Gradient Harmonized Single-stage Detector》论文阅读以及代码分析
  15. Python ctypes 调用API函数模拟键盘鼠标事件
  16. w10能装inventor2019_Inventor2019下载
  17. 输入关键字生成对联_对联生成器
  18. [转帖]同事推荐的的aira2
  19. POJ_3723_Conscription
  20. 知名影音平台投入朕亨公益!在世界动物日进行义卖关爱动物

热门文章

  1. ecos 编译时无法找到 tclConfig.sh 和 tkConfig.sh
  2. [Ubuntu] 安装/卸载 声卡驱动
  3. 净空法师认为忧郁症源于缺乏伦理教育和因果教育
  4. android的布局流程,Android View 布局流程(Layout)全面解析
  5. java程序设计_Java程序设计:学习笔记(4-5)(未完工)
  6. 第一个使用计算机图形学术语,计算机图形学考题
  7. linux内核的进程管理,Linux内核设计与实现——进程管理
  8. oracle为什么不用指定数据库,两个数据库怎么保持数据正确显示
  9. docker 退出mysql_Docker mysql即时退出
  10. python数据分析实训大纲,数据分析大赛考纲:(二)Python数据分析应会部分