[SHOI2007]园丁的烦恼
裸的二维数点
#include"cstdio"
#include"cstring"
#include"iostream"
#include"algorithm"
using namespace std;
const int MAXN=5e5+5;
int n,m,maxn;
int Tib[MAXN*3];
struct rpg{
int kd,x,y,id;
int rey,val;
}pnt[MAXN*5];
bool cmp1(rpg a,rpg b){return a.y<b.y;}
bool cmp2(rpg a,rpg b)
{
if(a.x!=b.x) return a.x<b.x;
if(a.y!=b.y) return a.y<b.y;
return a.kd<b.kd;
}
inline int read()
{
int x=0;char ch=getchar();
while(ch<'0'||'9'<ch) ch=getchar();
while('0'<=ch&&ch<='9') x=x*10+(ch^48),ch=getchar();
return x;
}
void init()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
int x=read(),y=read();
pnt[i]=(rpg){1,x,y,m+n};
}for(int i=1;i<=m;++i){
int a=read(),b=read(),c=read(),d=read();
pnt[n+i]=(rpg){2,a-1,b-1,i};
pnt[n+m+i]=(rpg){3,a-1,d,i};
pnt[n+(m<<1)+i]=(rpg){4,c,b-1,i};
pnt[n+(m*3)+i]=(rpg){5,c,d,i};
}sort(pnt+1,pnt+n+(m<<2)+1,cmp1);pnt[1].rey=1;
for(int i=2;i<=n+(m<<2);++i) pnt[i].rey=pnt[i].y==pnt[i-1].y?pnt[i-1].rey:pnt[i-1].rey+1;
maxn=pnt[n+(m<<2)].rey;sort(pnt+1,pnt+n+(m<<2)+1,cmp2);
return;
}
void ins(int x)
{
for(int i=x;i<=maxn;i+=i&-i) ++Tib[i];
return;
}
int query(int x)
{
int sum=0;
for(int i=x;i;i&=i-1) sum+=Tib[i];
return sum;
}
bool cmp3(rpg a,rpg b){return a.id==b.id?a.kd<b.kd:a.id<b.id;}
void solve()
{
for(int i=1;i<=n+(m<<2);++i){
if(pnt[i].kd==1) ins(pnt[i].rey);
else pnt[i].val=query(pnt[i].rey);
}sort(pnt+1,pnt+n+(m<<2)+1,cmp3);
for(int i=1;i<=(m<<2);i+=4){
printf("%d\n",pnt[i].val-pnt[i+1].val-pnt[i+2].val+pnt[i+3].val);
}return;
}
int main()
{
init();
solve();
return 0;
}
[SHOI2007]园丁的烦恼的更多相关文章
- P2163 [SHOI2007]园丁的烦恼
题目 P2163 [SHOI2007]园丁的烦恼 做法 关于拆点,要真想拆直接全部用树状数组水过不就好了 做这题我们练一下\(cdq\)分治 左下角\((x1,y1)\)右上角\((x2,y2)\), ...
- bzoj1935 [Shoi2007]园丁的烦恼
bzoj1935 [Shoi2007]园丁的烦恼 有N个点坐标为(xi,yi),M次询问,询问(a,b)-(c,d)的矩形内有多少点. 0≤n≤500000,1≤m≤500000,0≤xi,yi≤10 ...
- 洛谷 P2163 [SHOI2007]园丁的烦恼 (离线sort,树状数组,解决三维偏序问题)
P2163 [SHOI2007]园丁的烦恼 题目描述 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草. 有一天国王漫步在花园 ...
- [LuoguP2163][SHOI2007]园丁的烦恼_CDQ分治
园丁的烦恼 题目链接:https://www.luogu.org/problem/P2163 数据范围:略. 题解: 树套树过不去,那就$CDQ$分治好了. 有点小细节,但都是$CDQ$分治必要的. ...
- 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对数有多少组 改成四个询问,拆成四个前缀和的形式后就 ...
- BZOJ1935或洛谷2163 [SHOI2007]园丁的烦恼
BZOJ原题链接 洛谷原题链接 很容易想到二维前缀和. 设\(S[i][j]\)表示矩阵\((0, 0)(i, j)\)内树木的棵数,则询问的矩形为\((x, y)(xx, yy)\)时,答案为\(S ...
- 【[SHOI2007]园丁的烦恼】
\(CDQ\) 分治的神奇操作 这个问题跟偏序问题好像差的不小啊 但是就是可以转化过去 对于一个查询我们可以把它拆成四个,也就是用二维前缀和的方式来查询 我们发现其实前缀和的定义就是多少个点的横纵坐标 ...
- luoguP2163 [SHOI2007]园丁的烦恼
安利系列博文 https://www.cnblogs.com/tyner/p/11565348.html https://www.cnblogs.com/tyner/p/11605073.html 题 ...
随机推荐
- centos和ubuntu的网络属性配置
一. centos的网络配置 1. 修改 /etc/sysconfig/network-scripts/ifcfg-IFACE: DEVICE:此配置文件应用到 ...
- 3.1 High Availability
摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...
- 架构师养成记--24.linux常用命令
一.Linux 文件 根据上文Linux 文件说明1.文件的rwx d开头表示文件夹, -开头的表示文件, l开头表示链接文件 r:read,w:write,x:execute ...
- 架构师养成记--16.disruptor并发框架中RingBuffer的使用
很多时候我们只需要消息中间件这样的功能,那么直需要RinBuffer就可以了. 入口: import java.util.concurrent.Callable; import java.util.c ...
- CSS03--框模型、定位position、浮动
我们接着“CSS02”,继续学习一些新的样式属性. 1.框模型: 规定了元素框处理 元素内容.内边距(padding).边框(border).外边距(margin,可以是负值)的方式 2.内边距 ...
- go 语言学习 1
Go语言命名 Go语言关键字 1.Go语言有25个关键字: 2.关键字用途: var :用于变量的声明const :用于常量的声明type :用于声明类型func :用于声明函数和方法package ...
- python全栈开发学习_内容目录及链接
python全栈开发学习_day1_计算机五大组成部分及操作系统 python全栈开发学习_day2_语言种类及变量 python全栈开发_day3_数据类型,输入输出及运算符 python全栈开发_ ...
- python全栈开发_day15_模块学习
一:模块 1)什么是模块 每一个py文件就是一个模块 导入模块,会编译执行 1.形成一个对应的pyc文件 2.产生该模块自己的店全局名称空间 3.在使用该模块的全局名称空间中产生一个名字(导入的模块名 ...
- javascript的简单查询和插入和修改
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- net与树莓派的情缘-安装Redis(四)
在Linux下安装Redis非常简单,具体步骤如下(官网有说明): .下载源码,解压缩后编译源码. $ wget http://download.redis.io/releases/redis-3.0 ...