BZOJ1935: [Shoi2007]Tree 园丁的烦恼
1935: [Shoi2007]Tree 园丁的烦恼
Time Limit: 15 Sec Memory Limit: 357 MB
Submit: 552 Solved: 220
[Submit][Status]
Description
Input
Output
Sample Input
0 0
0 1
1 0
0 0 1 1
Sample Output
HINT
Source
题解:
这种题。。。按x轴排一下序,然后树状数组算一下前缀和。。。
刚开始好心离散化了一下结果慢了一倍 囧
代码:(离散化)
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 2000000+5
#define maxm 500+100
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,m,cnt,tot,b[maxn],c[maxn],s[maxn],ans[maxn];
struct rec{int x,y,z,id;}a[*maxn];
inline void add(int x)
{
for(;x<=cnt;x+=x&(-x))s[x]++;
}
inline int sum(int x)
{
int t=;
for(;x;x-=x&(-x))t+=s[x];
return t;
}
inline bool cmp1(int x,int y){return a[x].y<a[y].y;}
inline bool cmp2(rec x,rec y)
{
if(x.x!=y.x)return x.x<y.x;
else if(x.y!=y.y)return x.y<y.y;
else return x.id<y.id;
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();m=read();
for1(i,n)a[i].x=read()+,a[i].y=read()+;tot=n;
for1(i,m)
{
int x1=read()+,y1=read()+,x2=read()+,y2=read()+;
a[++tot]=(rec){x1-,y1-,,i};a[++tot]=(rec){x2,y2,,i};
a[++tot]=(rec){x2,y1-,-,i};a[++tot]=(rec){x1-,y2,-,i};
}
for1(i,tot)b[i]=i;
sort(b+,b+tot+,cmp1);
cnt=;
for1(i,tot)
{
if(i==||a[b[i]].y!=a[b[i-]].y)cnt++;
c[b[i]]=cnt;
}
for1(i,tot)a[i].y=c[i];
sort(a+,a+tot+,cmp2);
for1(i,tot)
{
if(!a[i].id)add(a[i].y);
else ans[a[i].id]+=a[i].z*sum(a[i].y);
}
for1(i,m)printf("%d\n",ans[i]);
return ;
}
代码:(不离散化)
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 2500000+5
#define maxm 10000000+5
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,m,cnt,tot,b[maxn],c[maxn],s[maxm],ans[maxn];
struct rec{int x,y,z,id;}a[maxn];
inline void add(int x)
{
for(;x<maxn;x+=x&(-x))s[x]++;
}
inline int sum(int x)
{
int t=;
for(;x;x-=x&(-x))t+=s[x];
return t;
}
inline bool cmp(rec x,rec y)
{
if(x.x!=y.x)return x.x<y.x;
else if(x.y!=y.y)return x.y<y.y;
else return x.id<y.id;
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();m=read();
for1(i,n)a[i].x=read()+,a[i].y=read()+;tot=n;
for1(i,m)
{
int x1=read()+,y1=read()+,x2=read()+,y2=read()+;
a[++tot]=(rec){x1-,y1-,,i};a[++tot]=(rec){x2,y2,,i};
a[++tot]=(rec){x2,y1-,-,i};a[++tot]=(rec){x1-,y2,-,i};
}
sort(a+,a+tot+,cmp);
for1(i,tot)
{
if(!a[i].id)add(a[i].y);
else ans[a[i].id]+=a[i].z*sum(a[i].y);
}
for1(i,m)printf("%d\n",ans[i]);
return ;
}
BZOJ1935: [Shoi2007]Tree 园丁的烦恼的更多相关文章
- [bzoj1935][shoi2007]Tree 园丁的烦恼(树状数组+离线)
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 980 Solved: 450[Submit][ ...
- bzoj千题计划143:bzoj1935: [Shoi2007]Tree 园丁的烦恼
http://www.lydsy.com/JudgeOnline/problem.php?id=1935 二维偏序问题 排序x,离散化树状数组维护y #include<cstdio> #i ...
- [bzoj1935][Shoi2007]Tree 园丁的烦恼 _树状数组
Tree 园丁的烦恼 bzoj-1935 Shoi-2007 题目大意:给定平面上的$n$个点,$m$次查询矩形点个数. 注释:$1\le n,m\le 5\cdot 10^5$. 想法:静态二维数点 ...
- [bzoj4822][Cqoi2017]老C的任务&[bzoj1935][Shoi2007]Tree 园丁的烦恼
来自FallDream的博客,未经允许,请勿转载,谢谢. 老 C 是个程序员. 最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统.作为经验丰富的程序员,老 C 轻松地完成 ...
- BZOJ1935:[SHOI2007]Tree 园丁的烦恼(CDQ分治)
Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个园丁道: ...
- [BZOJ1935][SHOI2007]Tree 园丁的烦恼(树状数组)
题目描述 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草. 有一天国王漫步在花园里,若有所思,他问一个园丁道: “最近我在思 ...
- 初涉二维数点问题&&bzoj1935: [Shoi2007]Tree 园丁的烦恼
离线好评 Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个 ...
- bzoj1935: [Shoi2007]Tree 园丁的烦恼lowbit 离散化
链接 bzoj 最好不要去luogu,数据太水 思路 一个询问转化成四个矩阵,求起点\((0,0)到(x,y)\)的矩阵 离线处理,离散化掉y,x不用离散. 一行一行的求,每次处理完一行之后下一行的贡 ...
- BZOJ1935: [Shoi2007]Tree 园丁的烦恼(树状数组 二维数点)
题意 题目链接 Sol 二维数点板子题 首先把询问拆成四个矩形 然后离散化+树状数组统计就可以了 // luogu-judger-enable-o2 #include<bits/stdc++.h ...
随机推荐
- 3.redis.3.2 下载,安装、配置、使用、集群主从创建 - 3
当然,集群最主要的就是配置文件: 简单配置如下, port 7001 bind 127.0.0.1 databases 16 appendonly yes appendfilename "a ...
- 今天是程序员节(Programmer‘s Day)
http://blog.jobbole.com/47787/ 我只想知道他们到底在说神马???
- Java_Iterator-------迭代器配合Listarray使用,具有更多的功能(转载)
转载自:http://www.cnblogs.com/amboyna/archive/2007/09/25/904804.html 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可 ...
- Java—static、this、super用法总结
通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.(理解为加了static的就是全局变量)但是,并不是说有了这种便利,你便可 ...
- LINUX开机启动过程
LINUX开机启动过程 启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息 ...
- 菜鸟的MySQL学习笔记(三)
4-1插入记录INSERT INSERT [INTO] tbl_name [(col_name)] {VALUES|VALUE} ({expr|DEFAULT},...), (...), ... ...
- spring的基本配置
一:web.xml (1)spring mvc的配置 <servlet> <description>spring mvc servlet</description> ...
- 对React的理解
转自:http://www.cocoachina.com/webapp/20150721/12692.html 现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了R ...
- 转 mysql 中sql 语句查询今天、昨天、7天、近30天、本月、上一月 数据
转自 http://blog.csdn.net/ve_love/article/details/19685399
- 动画讲解 Eclipse 常用快捷键
Eclipse有强大的编辑功能, 工欲善其事,必先利其器, 掌握Eclipse快捷键,可以大大提高工作效率. 小坦克我花了一整天时间, 精选了一些常用的快捷键操作,并且精心录制了动画, 让你一看就会. ...