bzoj1935 [Shoi2007]园丁的烦恼
bzoj1935 [Shoi2007]园丁的烦恼
有N个点坐标为(xi,yi),M次询问,询问(a,b)-(c,d)的矩形内有多少点。
0≤n≤500000,1≤m≤500000,0≤xi,yi≤10000000
看完数据范围傻眼系列。
做法:
离线处理
因为这个范围肯定不能把x y都离散,
所以只把点和询问的y坐标放在一起都离散化,然后一起按x坐标排序,
再开一个树状数组,求出每个需要的点的二维前缀和。
不理解的话拿画图板画一下就好了。
细节见代码
#include<bits/stdc++.h>
#define MAXN 500005
#define lowbit(a) (a&-a)
using namespace std;
inline int read(){
int x=,t=;char c;c=getchar();
while(c<''||c>''){if(c=='-')t=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'',c=getchar();}
return x*t;
}
int N,M,Y[*MAXN],cnt,tx[MAXN],ty[MAXN],sum[MAXN][],
xa[MAXN],ya[MAXN],xb[MAXN],yb[MAXN],c[MAXN*],siz;
struct Work{
int x,y,id,f;
bool operator <(const Work z)const{
return x<z.x||(x==z.x&&f<z.f);
}
}a[*MAXN];
inline void add(int pos,int val){
for(;pos<=siz;pos+=lowbit(pos))
c[pos]+=val;
}
inline int query(int pos){
int s=;
for(;pos>;pos-=lowbit(pos))
s+=c[pos];
return s;
}
int main()
{
N=read(),M=read();
for(int i=;i<=N;i++){
tx[i]=read()+,ty[i]=read();
Y[++cnt]=ty[i];
}
for(int i=;i<=M;i++){
xa[i]=read()+,ya[i]=read(),xb[i]=read()+,yb[i]=read();
Y[++cnt]=ya[i],Y[++cnt]=yb[i];
}
sort(Y+,Y++cnt);
siz=unique(Y+,Y++cnt)-Y-; cnt=;
for(int i=;i<=N;i++){
ty[i]=lower_bound(Y+,Y++siz,ty[i])-Y; //把点和询问放在一起离散化,然后排序。
a[++cnt]=(Work){tx[i],ty[i],,};
}
for(int i=;i<=M;i++){
ya[i]=lower_bound(Y+,Y++siz,ya[i])-Y;
yb[i]=lower_bound(Y+,Y++siz,yb[i])-Y;
a[++cnt]=(Work){xb[i], yb[i], i,}; //把需要计算矩阵和需要的四个点加进操作数组中,二位前缀和不用解释吧。
a[++cnt]=(Work){xa[i]-,ya[i]-,i,};
a[++cnt]=(Work){xa[i]-,yb[i],i,};
a[++cnt]=(Work){xb[i],ya[i]-,i,};
}
sort(a+,a++cnt);
for(int i=;i<=cnt;i++){
if(a[i].id) //遇到点把他加进树状数组
sum[a[i].id][a[i].f]=query(a[i].y);
else
add(a[i].y,);
}
for(int i=;i<=M;i++)
printf("%d\n",sum[i][]+sum[i][]-sum[i][]-sum[i][]);
return ;
}
附个离散写法
sort -> unique -> lower_bound
bzoj1935 [Shoi2007]园丁的烦恼的更多相关文章
- P2163 [SHOI2007]园丁的烦恼
题目 P2163 [SHOI2007]园丁的烦恼 做法 关于拆点,要真想拆直接全部用树状数组水过不就好了 做这题我们练一下\(cdq\)分治 左下角\((x1,y1)\)右上角\((x2,y2)\), ...
- 洛谷 P2163 [SHOI2007]园丁的烦恼 (离线sort,树状数组,解决三维偏序问题)
P2163 [SHOI2007]园丁的烦恼 题目描述 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草. 有一天国王漫步在花园 ...
- [LuoguP2163][SHOI2007]园丁的烦恼_CDQ分治
园丁的烦恼 题目链接:https://www.luogu.org/problem/P2163 数据范围:略. 题解: 树套树过不去,那就$CDQ$分治好了. 有点小细节,但都是$CDQ$分治必要的. ...
- BZOJ1935或洛谷2163 [SHOI2007]园丁的烦恼
BZOJ原题链接 洛谷原题链接 很容易想到二维前缀和. 设\(S[i][j]\)表示矩阵\((0, 0)(i, j)\)内树木的棵数,则询问的矩形为\((x, y)(xx, yy)\)时,答案为\(S ...
- P2163 【[SHOI2007]园丁的烦恼】
其实是不用把一个询问拆成四个的 把询问转化为数学语言: 对于每个查询,询问满足$a<=x<=b$且$c<=y<=d$的点$x,y$的个数 ~~自然~~想到偏序问题,看到有两个式 ...
- P2163 [SHOI2007]园丁的烦恼(cdq分治)
思路 其实是cdq的板子 题目要求询问对于每个给出的xi,yi,xj,yj形如xi<=x<=xj.yi<=y<=yj的x,y对数有多少组 改成四个询问,拆成四个前缀和的形式后就 ...
- [SHOI2007]园丁的烦恼
裸的二维数点 #include"cstdio" #include"cstring" #include"iostream" #include& ...
- 【[SHOI2007]园丁的烦恼】
\(CDQ\) 分治的神奇操作 这个问题跟偏序问题好像差的不小啊 但是就是可以转化过去 对于一个查询我们可以把它拆成四个,也就是用二维前缀和的方式来查询 我们发现其实前缀和的定义就是多少个点的横纵坐标 ...
- luoguP2163 [SHOI2007]园丁的烦恼
安利系列博文 https://www.cnblogs.com/tyner/p/11565348.html https://www.cnblogs.com/tyner/p/11605073.html 题 ...
随机推荐
- xBIM 基础16 IFC的空间层次结构
系列目录 [已更新最新开发文章,点击查看详细] 本篇介绍如何从文件中检索空间结构.IFC中的空间结构表示层次结构的嵌套结构,表示项目,站点,建筑物,楼层和空间.如果您查看IFC文档, 您会发现 ...
- sqlserver 恢复模式及避免日志爆满的方法
recovery simple 循环日志,空间自动回收,不可备份日志,恢复时仅能恢复到数据库备份时间点: 用于落地数据或测试环境或OLAP,不推荐用于生产OLTP 有时候distribution过大也 ...
- LCD中如何描绘点阵数据
下载软件“液晶汉字点阵zimo21” 描绘数据 打开软件后,新建图像-取模方式选择C51(A51和C51区别就是,A-F开头要加0,例如0x0AF)-模拟动画中放大格点-描绘图像-点阵生成区 对获得数 ...
- 强化学习(2)----Q-learning
1.Q-learning主要是Q表: 当前状态s1,接下来可以有两个动作选择,看电视a1和学习a2,对于agent人来说,可以根据reward来作出决策(Policy).目的就是得到奖励最大. Q-l ...
- NOIp模拟赛二十八
(这是NOIp模拟赛?应该是NOI模拟赛不小心加了个p) 嗯,假装这是正经的NOIp模拟赛,从今天开始也写写题解吧(这几天被虐的惨惨) 今日情况:8+50+0=58 A题输出样例,B题正解写挂,C题不 ...
- luogu P4139 上帝与集合的正确用法(扩展欧拉定理)
本蒟蒻现在才知带扩展欧拉定理. 对于任意的\(b\geq\varphi(p)\)有 \(a^b\equiv a^{b\ mod\ \varphi(p)+\varphi(p)}(mod\ p)\) 当\ ...
- 【jQuery05】通过按键 来切换 class
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- RHEL8.0-beta-1.ISO
https://pan.baidu.com/s/1Yh_xuz39xGRrCtGtwhuqQg RHEL-8.0-beta-1-x86_64-dvd.iso 文件名: E:\rhel-8. ...
- Unity 制作安装程序和卸载程序
1.最简单的方式通过winrar制作 但是做出来的页面好low的感觉 参考链接:https://www.cnblogs.com/fetty/p/5185913.html 2.通过inno制作安装程序: ...
- 【转】 C# DEBUG 调试信息打印及输出详解
[转] C# DEBUG 调试信息打印及输出详解 1.debug只在[debug模式下才执行](运行按钮后面的下拉框可选) 2.debug提供了许多调试指令,如断言 System.D ...