给定一个 \(n \times n\) 矩阵,先进行 \(m_1 \leq 5e4\) 次区间加,再进行 \(m_2 \leq 5e5\) 次询问,每次询问要求输出矩形区间内的最大数。\(n \leq 2000\)

Solution

考虑到 \(n\) 比较小,可以直接二位差分前缀和搞出整个矩阵。

然后一本正经地扔进二维线段树

二维线段树怎么写来着?

卡常致死

返回值慢得让人恶心

#include <bits/stdc++.h>
using namespace std; #define ll long long int n;
ll val[18000005],a[2005][2005]; int m1,m2; void build(int p,int xl,int xr,int yl,int yr,int fg) {
if(xl>xr || yl>yr) return;
if(xl==xr && yl==yr) {
val[p]=a[xl][yl];
}
else if(fg) {
build(p<<1,xl,(xl+xr)>>1,yl,yr,fg^1);
build(p<<1|1,((xl+xr)>>1)+1,xr,yl,yr,fg^1);
val[p]=max(val[p<<1],val[p<<1|1]);
}
else {
build(p<<1,xl,xr,yl,(yl+yr)>>1,fg^1);
build(p<<1|1,xl,xr,((yl+yr)>>1)+1,yr,fg^1);
val[p]=max(val[p<<1],val[p<<1|1]);
}
} ll tmp;
int qxl,qxr,qyl,qyr; void query(int p,int xl,int xr,int yl,int yr,int fg) {
if(val[p]<tmp) return;
if(xl>qxr || xr<qxl || yl>qyr || yr<qyl) return;
if(xl>=qxl && xr<=qxr && yl>=qyl && yr<=qyr) tmp=max(tmp,val[p]);
else if(fg) {
query(p<<1,xl,(xl+xr)>>1,yl,yr,fg^1);
query(p<<1|1,((xl+xr)>>1)+1,xr,yl,yr,fg^1);
}
else {
query(p<<1,xl,xr,yl,(yl+yr)>>1,fg^1);
query(p<<1|1,xl,xr,((yl+yr)>>1)+1,yr,fg^1);
}
} ll calc(int x1,int y1,int x2,int y2) {
tmp=0;qxl=x1;qxr=x2;qyl=y1;qyr=y2;
query(1,1,n,1,n,1);
return tmp;
} signed main() {
scanf("%d%d%d",&n,&m1,&m2);
for(int i=1;i<=m1;i++) {
int x1,y1,x2,y2,w;
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&w);
a[x1][y1]+=w;
a[x1][y2+1]-=w;
a[x2+1][y1]-=w;
a[x2+1][y2+1]+=w;
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
}
}
build(1,1,n,1,n,1);
for(int i=1;i<=m2;i++) {
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
printf("%lld\n",calc(x1,y1,x2,y2));
}
}

Wannafly Winter Camp 2020 Day 5I Practice for KD Tree - 二维线段树的更多相关文章

  1. Wannafly Winter Camp 2020 Day 7E 上升下降子序列 - 数学

    神奇公式 #include <bits/stdc++.h> using namespace std; #define int long long int n,mod,c[205][205] ...

  2. Wannafly Winter Camp 2020 Day 7D 方阵的行列式 - 数学

    于是去弄了个板子来 #include <bits/stdc++.h> using namespace std; #define int long long const int mod = ...

  3. Wannafly Winter Camp 2020 Day 7A 序列 - 树状数组

    给定一个全排列,对于它的每一个子序列 \(s[1..p]\),对于每一个 \(i \in [1,p-1]\),给 \(s[i],s[i+1]\) 间的每一个值对应的桶 \(+1\),求最终每个桶的值. ...

  4. Wannafly Winter Camp 2020 Day 6J K重排列 - dp

    求 \(K\) 是多少个 \(n\) 元置换的周期.\(T\leq 100, n\leq 50, K \leq 10^{18}\) Solution 置换可以被试做若干个环组成的有向图,于是考虑 dp ...

  5. Wannafly Winter Camp 2020 Day 6I 变大! - dp

    给定一个序列,可以执行 \(k\) 次操作,每次选择连续的三个位置,将他们都变成他们的最大值,最大化 \(\sum a_i\) 需要对每一个 \(k=i\) 输出答案 \(n \leq 50, a_i ...

  6. Wannafly Winter Camp 2020 Day 6H 异或询问 - 二分

    给定一个长 \(n\) 的序列 \(a_1,\dots,a_n\),定义 \(f(x)\) 为有多少个 \(a_i \leq x\) 有 \(q\) 次询问,每次给定 \(l,r,x\),求 \(\s ...

  7. Wannafly Winter Camp 2020 Day 6G 单调栈 - 贪心

    对于排列 \(p\),它的单调栈 \(f\) 定义为,\(f_i\) 是以 \(p_i\) 结尾的最长上升子序列的长度 先给定 \(f\) 中一些位置的值,求字典序最小的 \(p\) 使得它满足这些值 ...

  8. Wannafly Winter Camp 2020 Day 6D 递增递增 - dp,组合数学

    给定两个常为 \(n\) 的序列 \(l_i,r_i\),问夹在它们之间 ( \(\forall i, l_i \leq a_i \leq r_i\) ) 的不降序列的元素总和. Solution 先 ...

  9. Wannafly Winter Camp 2020 Day 6C 酒馆战棋 - 贪心

    你方有 \(n\) 个人,攻击力和血量都是 \(1\).对方有 \(a\) 个普通人, \(b\) 个只有盾的,\(c\) 个只有嘲讽的,\(d\) 个有盾又有嘲讽的,他们的攻击力和血量都是无穷大.有 ...

随机推荐

  1. VFP9.0的GDI+类的使用

    GDI+你应该不会陌生吧,然而,在VFP里要使用这一技术,可不是一件容易的事,你得学习一大堆API函数.或许,一想到这,你已经望而却步了.不过,从现在起,这一技术不再是豪门旺族的专宠了,我们每一位Fo ...

  2. Android Studio 找不到夜神模拟器的解决办法

    Android Studio 找不到夜神模拟器的解决办法 1.启动夜神模拟器 2.找到你电脑上的夜神安装目录,在bin目录下打开cmd窗口,运行命令 nox_adb.exe connect 127.0 ...

  3. [Redis-CentOS7]Redis哈希操作(五)

    哈希相当于下面Python代码 { "person":{ "name": "peigy", "age": "1 ...

  4. 珠峰-node

    ##### 文件流的读写. ##### 文件流对pipe的封装. ####

  5. WPF 原生绑定和命令功能使用指南

    WPF 原生绑定和命令功能使用指南 魏刘宏 2020 年 2 月 21 日 如今,当谈到 WPF 时,我们言必称 MVVM.框架(如 Prism)等,似乎已经忘了不用这些的话该怎么使用 WPF 了.当 ...

  6. C# 多线程的阻塞和继续-ManaulResetEvent的使用

    在工作中,会遇到需要多线程处理相应的业务需求,最典型的包括Socket的通信. 多线程处理里,就会考虑到,哪个线程先运行,哪个线程后运行的情况. 这里我介绍一下,使用ManualResetEvent类 ...

  7. R语言入门:向量索引

    这节的内容是建立在之前我们对R语言最基本向量赋值的基础之上的,笔者本人学完R当中向量的索引感觉异常舒适,因为这个比Python的索引爽多了,是什么值开始索引就从哪里开始索引,到哪里结束就在哪里结束,而 ...

  8. Android中使用Canvas和Paint绘制一个安卓机器人

    场景 在Android中画笔使用Paint类,画布使用Canvas类来表示. 绘图的基本步骤 首先编写一个继承自View的自定义View类,然后重写其onDraw方法,最后把自定义的view添加到ac ...

  9. Kakfa集群(2.11-0.10.1.0)版本滚动升级方案

    Kafka集群版本升级(2.11-0.10.1.0)升级(2.11-0.10.2.2) 官网升级说明: 一.系统环境Zookeeper集群:172.16.2.10172.16.2.11172.16.2 ...

  10. Linux btrfs文件系统

    btrfs,它名字挺多:B-tree fs;Butter fs;Better fs 开源协议是GPL,2007年由Oracle研发 核心特性: 多物理卷支持,btrfs可由多个物理卷组成:支持RAID ...