BZOJ4533 [BeiJing2014 WinterCamp] 数据
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作。
本文作者:ljh2000
作者博客:http://www.cnblogs.com/ljh2000-jump/
转载请注明出处,侵权必究,保留最终解释权!
Description
Input
Output
Sample Input
7 5
6 2
3 1
5
1 6 1
1 5 5
2 7 1
0 3 2
1 1 0
Sample Output
2
4
3
- //It is made by ljh2000
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- #include <cstdio>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- typedef long long LL;
- const int MAXN = 200011;
- const int inf = 2000000001;
- int n,m,nowD,root,ql,qr,ans;
- struct KDTree{ int d[2],Min[2],Max[2],l,r; }t[MAXN];
- inline bool cmp(KDTree q,KDTree qq){ if(q.d[nowD]==qq.d[nowD]) return q.d[nowD^1]<qq.d[nowD^1]; return q.d[nowD]<qq.d[nowD]; }
- inline void init(int x){ for(int i=0;i<2;i++) t[x].Min[i]=t[x].Max[i]=t[x].d[i]; }
- inline int count_min(int x){
- int dd=0;
- if(t[x].Min[0]>ql) dd+=t[x].Min[0]-ql;
- if(t[x].Max[0]<ql) dd+=ql-t[x].Max[0];
- if(t[x].Min[1]>qr) dd+=t[x].Min[1]-qr;
- if(t[x].Max[1]<qr) dd+=qr-t[x].Max[1];
- return dd;
- }
- inline int count_max(int x){ return max(abs(t[x].Min[0]-ql),abs(t[x].Max[0]-ql))+max(abs(t[x].Min[1]-qr),abs(t[x].Max[1]-qr)); }
- inline int getint(){
- int w=0,q=0; char c=getchar(); while((c<'0'||c>'9') && c!='-') c=getchar();
- if(c=='-') q=1,c=getchar(); while (c>='0'&&c<='9') w=w*10+c-'0',c=getchar(); return q?-w:w;
- }
- inline void update(int x){
- int l=t[x].l,r=t[x].r;
- if(l) {
- if(t[l].Min[0]<t[x].Min[0]) t[x].Min[0]=t[l].Min[0];
- if(t[l].Max[0]>t[x].Max[0]) t[x].Max[0]=t[l].Max[0];
- if(t[l].Min[1]<t[x].Min[1]) t[x].Min[1]=t[l].Min[1];
- if(t[l].Max[1]>t[x].Max[1]) t[x].Max[1]=t[l].Max[1];
- }
- if(r) {
- if(t[r].Min[0]<t[x].Min[0]) t[x].Min[0]=t[r].Min[0];
- if(t[r].Max[0]>t[x].Max[0]) t[x].Max[0]=t[r].Max[0];
- if(t[r].Min[1]<t[x].Min[1]) t[x].Min[1]=t[r].Min[1];
- if(t[r].Max[1]>t[x].Max[1]) t[x].Max[1]=t[r].Max[1];
- }
- }
- inline int build(int l,int r,int D){
- nowD=D; int mid=(l+r)>>1; nth_element(t+l+1,t+mid+1,t+r+1,cmp);
- if(l<mid) t[mid].l=build(l,mid-1,D^1);
- if(mid<r) t[mid].r=build(mid+1,r,D^1);
- init(mid); update(mid);
- return mid;
- }
- inline void insert(){
- int u=root; int D=0;
- while(1) {
- if(t[u].Min[0]>t[n].d[0]) t[u].Min[0]=t[n].d[0];
- if(t[u].Max[0]<t[n].d[0]) t[u].Max[0]=t[n].d[0];
- if(t[u].Min[1]>t[n].d[1]) t[u].Min[1]=t[n].d[1];
- if(t[u].Max[1]<t[n].d[1]) t[u].Max[1]=t[n].d[1];
- if(t[n].d[D]<=t[u].d[D]) {
- if(!t[u].l) { t[u].l=n; return ; }
- else u=t[u].l;
- }
- else{
- if(!t[u].r) { t[u].r=n; return ; }
- else u=t[u].r;
- }
- D^=1;
- }
- }
- inline void query_max(int u){
- int dl=0,dr=0,dd=abs(t[u].d[0]-ql)+abs(t[u].d[1]-qr); if(dd>ans) ans=dd;
- if(t[u].l) dl=count_max(t[u].l); if(t[u].r) dr=count_max(t[u].r);
- if(dl>dr) {
- if(dl>ans) query_max(t[u].l);
- if(dr>ans) query_max(t[u].r);
- }
- else{
- if(dr>ans) query_max(t[u].r);
- if(dl>ans) query_max(t[u].l);
- }
- }
- inline void query_min(int u){
- int dl=inf,dr=inf,dd=abs(t[u].d[0]-ql)+abs(t[u].d[1]-qr); if(dd<ans) ans=dd;
- if(t[u].l) dl=count_min(u); if(t[u].r) dr=count_min(u);
- if(dl<dr) {
- if(dl<ans) query_min(t[u].l);
- if(dr<ans) query_min(t[u].r);
- }
- else{
- if(dr<ans) query_min(t[u].r);
- if(dl<ans) query_min(t[u].l);
- }
- }
- inline void work(){
- n=getint(); for(int i=1;i<=n;i++) t[i].d[0]=getint(),t[i].d[1]=getint();
- root=build(1,n,0); m=getint(); int ljh,x,y;
- while(m--) {
- ljh=getint(); x=getint(); y=getint();
- if(ljh==0) { t[++n].d[0]=x; t[n].d[1]=y; init(n); insert(); }
- else if(ljh==1) {
- ql=x; qr=y; ans=abs(t[1].d[0]-ql)+abs(t[1].d[1]-qr);
- query_min(root);
- printf("%d\n",ans);
- }
- else{
- ql=x; qr=y; ans=abs(t[1].d[0]-ql)+abs(t[1].d[1]-qr);
- query_max(root);
- printf("%d\n",ans);
- }
- }
- }
- int main()
- {
- work();
- return 0;
- }
BZOJ4533 [BeiJing2014 WinterCamp] 数据的更多相关文章
- BZOJ4532: [BeiJing2014 WinterCamp] 珠链
Description Alex喜欢玩网络游戏,认为这是智力和体力的综合锻炼.在一次游戏活动中,他意外获得了一个传说中威力极其强大的法宝:珠链. 珠链,顾名思义,就是由许多小珠子串起来的一条链.珠子 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- bzoj1874 [BeiJing2009 WinterCamp]取石子游戏
1874: [BeiJing2009 WinterCamp]取石子游戏 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 925 Solved: 381[ ...
- Hadoop 中利用 mapreduce 读写 mysql 数据
Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...
- App开发:模拟服务器数据接口 - MockApi
为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...
- 使用TSQL查询和更新 JSON 数据
JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...
- SQL Server 大数据搬迁之文件组备份还原实战
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...
- SQLSERVER将一个文件组的数据移动到另一个文件组
SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...
- 【.net 深呼吸】设置序列化中的最大数据量
欢迎收看本期的<老周吹牛>节目,由于剧组严重缺钱,故本节目无视频无声音.好,先看下面一个类声明. [DataContract] public class DemoObject { [Dat ...
随机推荐
- Linux下Oracle 10.2.0.1升级到10.2.0.4总结
最近部署测试环境时,将测试环境ORACLE数据库从10.2.0.1升级到了10.2.0.4,顺便整理记录一下升级过程. 实验环境: 操作系统:Oracle Linux Server release 5 ...
- Java:Remote Debug
Java Remote Debug -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,add ...
- Java javassist动态代理
package org.windwant.spring.core.proxy; import javassist.ClassPool; import javassist.CtClass; import ...
- Linux系统中 安装Vmware Toolst工具
前提: 安装虚拟机.可以参考:在Windows上安装虚拟机详细图文教程 安装Linux.可以参考:在VMware Workstation里的Linux操作系统的安装——红旗桌面7.0 本文作者:sou ...
- Source Insight常用功能设置
熟悉工具的使用能在一定程度上提高工作效率,但工具永远只是工具,大家要把重点放在内功的修炼上. 符号导航 符号(变量.宏定义.结构定义.枚举.函数等等)在SI 中的检索非常方便.Ctrl+鼠标左键或Ct ...
- eclipse svn账号更换
在eclipse下用 svn的时候,我们习惯将用户名和密码保存.前天公司将svn的账号全部更换了,这时原来的eclipse保存的svn账号密码就失效了.那怎么样才能切换账号了,eclipse svn插 ...
- 【小白的CFD之旅】01 引子
小白的CFD之旅 写在前面 CFD是计算流体力学的英文简称,是计算机辅助工程(CAE)的主要分支,目前广泛应用与科学研究.工程设计中.这是一门综合了数学.计算机及流体力学的综合学科,涉及到众多的专业理 ...
- Label控件如何根据字符串自定义大小
一.. this.label_Msg.AutoSize = false; //设置label空件不能自动大小 二.. 用代码控制label控件的大小 1.根据字符串.label的宽度 计算字符串的面 ...
- Android原生游戏开发:使用JustWeEngine开发微信打飞机
使用JustWeEngine开发微信打飞机: 作者博客: 博客园 引擎地址:JustWeEngine 示例代码:EngineDemo JustWeEngine? JustWeEngine是托管在Git ...
- 第21章 java线程(1)-线程初步
java线程(1)-线程初步 1.并行和并发 并行和并发是即相似又有区别: 并行:指两个或者多个事件在同一时刻点发生. 并发:指两个或多个事件在同一时间段内发生 在操作系统中,并发性是指在一段事件内宏 ...