1935: [Shoi2007]Tree 园丁的烦恼
1935: [Shoi2007]Tree 园丁的烦恼
Time Limit: 15 Sec Memory Limit: 357 MB
Submit: 648 Solved: 273
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
0 0
0 1
1 0
0 0 1 1
Sample Output
HINT
Source
题解:一个超级神奇的题目,对于此题,首先很快可以想到用树状数组来搞,然后第一反应就是二维的,但想想这数据规模显然不现实。。。于是就想办法变成一维的,将Y坐标全部离散化(包括询问里面的),然后按照X坐标优先,Y坐标其次优先从小到大排序,然后遇到查询点就查询,否则就加入数组,然后没了,就是程序略长
/**************************************************************
Problem:
User: HansBug
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ var
i,j,k,l,m,n,nx,ny:longint;
a:array[..,..] of longint;
b:array[..,..] of longint;
c:array[..] of longint;
d:array[..,..] of longint;
e:array[..,..] of longint;
procedure swap(var x,y:longint);
var z:longint;
begin
z:=x;x:=y;y:=z;
end;
procedure sort(l,r:longint);
var i,j,x,y:longint;
begin
i:=l;j:=r;x:=d[(l+r) div ,];
repeat
while d[i,]<x do inc(i);
while d[j,]>x do dec(j);
if i<=j then
begin
swap(d[i,],d[j,]);
swap(d[i,],d[j,]);
inc(i);dec(j);
end;
until i>j;
if i<r then sort(i,r);
if l<j then sort(l,j);
end;
procedure sort0(l,r:longint);
var i,j,x,y,z:longint;
begin
i:=l;j:=r;x:=e[(l+r) div ,];y:=e[(l+r) div ,];z:=e[(l+r) div ,];
repeat
while (e[i,]<x) or ((e[i,]=x) and (e[i,]<y)) or ((e[i,]=x) and (e[i,]=y) and (e[i,]>z)) do inc(i);
while (e[j,]>x) or ((e[j,]=x) and (e[j,]>y)) or ((e[j,]=x) and (e[j,]=y) and (e[j,]<z)) do dec(j);
if i<=j then
begin
swap(e[i,],e[j,]);
swap(e[i,],e[j,]);
swap(e[i,],e[j,]);
inc(i);dec(j);
end;
until i>j;
if i<r then sort0(i,r);
if l<j then sort0(l,j);
end;
procedure sort1(l,r:longint);
var i,j,x,y:longint;
begin
i:=l;j:=r;x:=e[(l+r) div ,];
repeat
while e[i,]<x do inc(i);
while e[j,]>x do dec(j);
if i<=j then
begin
swap(e[i,],e[j,]);
swap(e[i,],e[j,]);
swap(e[i,],e[j,]);
swap(e[i,],e[j,]);
inc(i);dec(j);
end;
until i>j;
if i<r then sort1(i,r);
if l<j then sort1(l,j);
end;
procedure add(x,y:longint);
begin
if x<= then exit;
while x<=nx do
begin
inc(c[x],y);
inc(x,x and (-x));
end;
end;
function sum(x:longint):longint;
begin
sum:=;
while x> do
begin
inc(sum,c[x]);
dec(x,x and (-x));
end;
end;
begin
readln(n,m);
for i:= to n do readln(a[i,],a[i,]);
for i:= to m do readln(b[i*-,],b[i*-,],b[i*,],b[i*,]);
for i:= to n do
begin
d[i,]:=a[i,];
d[i,]:=i;
end;
for i:= to m* do
begin
d[n+i,]:=b[i,];
d[n+i,]:=-i;
end;
sort(,n+m*);j:=;d[,]:=-;
for i:= to n+m* do
begin
if d[i,]<>d[i-,] then inc(j);
if d[i,]> then a[d[i,],]:=j else b[-d[i,],]:=j;
end;
nx:=j;
for i:= to m do
begin
e[i*-,]:=b[i*-,]-;e[i*-,]:=b[i*-,]-;
e[i*-,]:=b[i*-,]-;e[i*-,]:=b[i*,];
e[i*-,]:=b[i*,];e[i*-,]:=b[i*-,]-;
e[i*,]:=b[i*,];e[i*,]:=b[i*,];
end;
for i:= to n do begin e[m*+i,]:=a[i,];e[m*+i,]:=a[i,]; end;
for i:= to m*+n do e[i,]:=i;
sort0(,m*+n);
fillchar(c,sizeof(c),);
for i:= to m*+n do if e[i,]<=(m*) then e[i,]:=sum(e[i,]) else add(e[i,],);
sort1(,m*+n);
for i:= to m do writeln(e[i*,]-e[i*-,]-e[i*-,]+e[i*-,]);
readln;
end.
1935: [Shoi2007]Tree 园丁的烦恼的更多相关文章
- BZOJ 1935: [Shoi2007]Tree 园丁的烦恼( 差分 + 离散化 + 树状数组 )
假如矩阵范围小一点就可以直接用二维树状数组维护. 这道题, 差分答案, 然后一维排序, 另一维离散化然后树状数组维护就OK了. ----------------------------------- ...
- bzoj1382 1935: [Shoi2007]Tree 园丁的烦恼
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 1261 Solved: 578[Submit] ...
- BZOJ 1935: [Shoi2007]Tree 园丁的烦恼 +CDQ分治
1935: [Shoi2007]Tree 园丁的烦恼 参考与学习:https://www.cnblogs.com/mlystdcall/p/6219421.html 题意 在一个二维平面中有n颗树,有 ...
- bzoj 1935: [Shoi2007]Tree 园丁的烦恼
Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个园丁道: ...
- BZOJ 1935: [Shoi2007]Tree 园丁的烦恼 [树状数组 离线 离散化]
传送门 刚才我还在郁闷网上怎么没人用$CDQ$分治做 突然发现根本没有时间序.... #include<iostream> #include<cstdio> #include& ...
- BZOJ.1935.[SHOI2007]Tree园丁的烦恼(CDQ分治 三维偏序)
题目链接 矩形查询可以拆成四个点的前缀和查询(树套树显然 但是空间不够) 每个操作表示为(t,x,y),t默认有序,对x分治,y用树状数组维护 初始赋值需要靠修改操作实现. //119964kb 43 ...
- [bzoj1935][shoi2007]Tree 园丁的烦恼(树状数组+离线)
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 980 Solved: 450[Submit][ ...
- BZOJ1935: [Shoi2007]Tree 园丁的烦恼
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 552 Solved: 220[Submit][ ...
- bzoj千题计划143:bzoj1935: [Shoi2007]Tree 园丁的烦恼
http://www.lydsy.com/JudgeOnline/problem.php?id=1935 二维偏序问题 排序x,离散化树状数组维护y #include<cstdio> #i ...
随机推荐
- C实现类、继承、多态
首先考虑用C实现类 肯定是要使用struct的,类的数据成员放在struct里面: 而类有构造函数.析构函数,这两个函数必须在struct外面,构造函数要分配struct空间并初始化struct成员, ...
- Linux笔记(五) - 用户管理命令
(1)添加用户:useradd [选项] 用户 -u UID:手工指定用户的UID号-d 家目录:手工指定用户的家目录-c 用户说明:手工指定用户说明,有空格需加双引号-g 初始组:手工指定初始组-G ...
- DataTables学习:从最基本的入门静态页面,使用ajax调用Json本地数据源实现前端开发深入学习,根据后台数据接口替换掉本地的json本地数据,以及报错的处理地方,8个例子(显示行附加信息,回调使用api,动态显示和隐藏列...),详细教程
一.DataTables 个人觉得学习一门新的插件或者技术时候,官方文档是最根本的,入门最快的地方,但是有时候看完官方文档,一步步的动手写例子,总会出现各种莫名其妙的错误,需要我们很好的进行研究出错 ...
- js实现360度图片旋转
▓▓▓▓▓▓ 大致介绍 这次是一个简单的效果,就是思路的问题 效果: ▓▓▓▓▓▓ 思路 旋转的效果就是根据鼠标的的移动距离来显示不同的图片,形成视觉差,仿佛就是在正真的旋转 由于效果是根据鼠标的移动 ...
- java基础知识点---size(),length(),length的区别
List<Integer> a=new ArrayList<Integer>(); a.add(1); System.out.println(a.size()); int b[ ...
- 重写titleView
在一些特定的情况下不能使用原有的titleView需要重写titleView代码如下 #import "TitleView.h" @implementation TitleView ...
- java线程之多个生产者消费者2.0
上一节中,通过while和notifyAll解决了多个生产者,消费者对共享资源的访问问题,现在开始升级 但是,仍然有改进之处,主要体现在两点: 1)使用新版本1.5开始后的锁Lock解决,目的将其全部 ...
- Java String类和Object类
String类: 方法: 1.charAt(int index):取index下标的char类型值 2.endsWith(String prefix) /startsWith(String prefi ...
- CentOS 6.5安装jdk1.8
1.源码包准备: 首先到官网下载jdk-8u66-linux-x64.tar.gz, http://www.oracle.com/technetwork/java/javase/downloads/j ...
- js移动端向左滑动出现删除按钮
最近在做移动端项目时,需要实现一个列表页面的每一项item向左滑动时出现相应的删除按钮,本来想着直接使用zepto的touch.js插件,因为之前实现相同的功能时用过这个插件,当时还挺好用的,直接使用 ...