Wannafly Winter Camp 2020 Day 5I Practice for KD Tree - 二维线段树
给定一个 \(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 - 二维线段树的更多相关文章
- Wannafly Winter Camp 2020 Day 7E 上升下降子序列 - 数学
神奇公式 #include <bits/stdc++.h> using namespace std; #define int long long int n,mod,c[205][205] ...
- Wannafly Winter Camp 2020 Day 7D 方阵的行列式 - 数学
于是去弄了个板子来 #include <bits/stdc++.h> using namespace std; #define int long long const int mod = ...
- Wannafly Winter Camp 2020 Day 7A 序列 - 树状数组
给定一个全排列,对于它的每一个子序列 \(s[1..p]\),对于每一个 \(i \in [1,p-1]\),给 \(s[i],s[i+1]\) 间的每一个值对应的桶 \(+1\),求最终每个桶的值. ...
- Wannafly Winter Camp 2020 Day 6J K重排列 - dp
求 \(K\) 是多少个 \(n\) 元置换的周期.\(T\leq 100, n\leq 50, K \leq 10^{18}\) Solution 置换可以被试做若干个环组成的有向图,于是考虑 dp ...
- Wannafly Winter Camp 2020 Day 6I 变大! - dp
给定一个序列,可以执行 \(k\) 次操作,每次选择连续的三个位置,将他们都变成他们的最大值,最大化 \(\sum a_i\) 需要对每一个 \(k=i\) 输出答案 \(n \leq 50, a_i ...
- Wannafly Winter Camp 2020 Day 6H 异或询问 - 二分
给定一个长 \(n\) 的序列 \(a_1,\dots,a_n\),定义 \(f(x)\) 为有多少个 \(a_i \leq x\) 有 \(q\) 次询问,每次给定 \(l,r,x\),求 \(\s ...
- Wannafly Winter Camp 2020 Day 6G 单调栈 - 贪心
对于排列 \(p\),它的单调栈 \(f\) 定义为,\(f_i\) 是以 \(p_i\) 结尾的最长上升子序列的长度 先给定 \(f\) 中一些位置的值,求字典序最小的 \(p\) 使得它满足这些值 ...
- Wannafly Winter Camp 2020 Day 6D 递增递增 - dp,组合数学
给定两个常为 \(n\) 的序列 \(l_i,r_i\),问夹在它们之间 ( \(\forall i, l_i \leq a_i \leq r_i\) ) 的不降序列的元素总和. Solution 先 ...
- Wannafly Winter Camp 2020 Day 6C 酒馆战棋 - 贪心
你方有 \(n\) 个人,攻击力和血量都是 \(1\).对方有 \(a\) 个普通人, \(b\) 个只有盾的,\(c\) 个只有嘲讽的,\(d\) 个有盾又有嘲讽的,他们的攻击力和血量都是无穷大.有 ...
随机推荐
- 洛谷P1179 【数字统计】
题目传送门 此题题意十分明确:就是让我们统计在[L , R]区间内的数字2出现的次数. 然后我们再看一看此题的数据范围:1≤L≤R≤100000,所以用n log n的复杂度是可以过的. 1.解题思路 ...
- 学习Sparql
一 . gstore--一种开源图数据库系统 https://www.docin.com/p-1951514687.html 二 . 使用 SPARQL 查询 RDF 数据 https://www.i ...
- H5谷歌登录 webview错误
接入谷歌登录 H5接入谷歌登录打包apk使用webview谷歌登录不上(谷歌不支持用户代理被归类为嵌入式用户代理(也称为网络视图),因此不允许向Google发出OAuth授权请求) 解决办法:替换ua ...
- mac系统目录结构
1 符合unix传统的目录 /bin 传统unix命令的存放目录,如ls,rm,mv等. /sbin 传统unix管理类命令存放目录,如fdisk,ifconfig等等. /usr 第三方程序安装目录 ...
- 服务器字体导致NPE
服务器字体问题 服务器在windows下运行正常. 搬到Linux之后,注册页有个404??? HTTP Status 500 – Internal Server Error Type 异常报告 消息 ...
- .net 微服务实践
l 前言 本文记录了我的一次.net core 微服务架构实践经验,以及所用到的技术 l 优点 每个服务聚焦于一块业务,无论在开发阶段或是部署阶段都是独立的,更适合被各个小团队开发维护,团队对服务 ...
- Shiro -- (一)简介
简介: Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证.授权.加密和会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务.并且相对于其他安全框架, ...
- SAP S4HANA里委外加工采购功能的变化
SAP S4HANA里委外加工采购功能的变化 [Part 1:主要变化点] 1.1,采购订单界面上的变化, 1.2, 新的事务代码: ME2ON (Subcontracting Cockpit), 1 ...
- djinn:1 Vulnhub Walkthrough
靶机下载链接: https://download.vulnhub.com/djinn/djinn.ova 主机端口扫描: FTP发现一些文件提示 1337端口是一个游戏,去看下 哈哈有点难,暂时放弃, ...
- Android中实现自定义View组件并使其能跟随鼠标移动
场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建An ...