• BZOJ 1941 [Sdoi2010]Hide and Seek


    题解:每个点向四个方向分别求最远点和最近点,用树状数组维护即可

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=500009;
    const int oo=1000000000;
    
    int n;
    int ans=oo;
    
    struct Point{
    	int x,y;
    	int mindist,maxdist;
    }p[maxn];
    bool cmpx(const Point &rhs1,const Point &rhs2){
    	if(rhs1.x==rhs2.x)return rhs1.y<rhs2.y;
    	else return rhs1.x<rhs2.x;
    }
    
    inline int lowbit(int x){
    	return x&(-x);
    }
    
    int b[maxn],nn;
    struct FenwickTree{
    	int c[maxn];
    	
    	void Addp(int x,int val){
    		while(x<=nn){
    			c[x]=max(c[x],val);
    			x+=lowbit(x);
    		}
    	}
    	int Query(int x){
    		int ret=-oo;
    		while(x){
    			ret=max(ret,c[x]);
    			x-=lowbit(x);
    		}
    		return ret;
    	}
    	void Fenwickinit(){
    		for(int i=0;i<maxn;++i)c[i]=-oo;
    	}
    }T[3];
    
    void Sol(){
    	T[1].Fenwickinit();
    	T[2].Fenwickinit();
    	for(int i=1;i<=n;++i)b[i]=p[i].y;
    	sort(b+1,b+1+n);
    	nn=unique(b+1,b+1+n)-b-1;
    	for(int i=1;i<=n;++i){
    		int pla=lower_bound(b+1,b+1+nn,p[i].y)-b;
    		int tm1=T[1].Query(pla);
    		int tm2=-T[2].Query(pla);
    		p[i].mindist=min(p[i].mindist,p[i].x+p[i].y-tm1);
    		p[i].maxdist=max(p[i].maxdist,p[i].x+p[i].y-tm2);
    		T[1].Addp(pla,p[i].x+p[i].y);
    		T[2].Addp(pla,-p[i].x-p[i].y);
    	}
    }
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i){
    		scanf("%d%d",&p[i].x,&p[i].y);
    		p[i].mindist=oo;
    		p[i].maxdist=-oo;
    	}
    	
    	sort(p+1,p+1+n,cmpx);
    	Sol();
    	
    	for(int i=1;i<=n;++i)p[i].y=-p[i].y;
    	sort(p+1,p+1+n,cmpx);
    	Sol();
    	
    	for(int i=1;i<=n;++i)p[i].y=-p[i].y;
    	for(int i=1;i<=n;++i)p[i].x=-p[i].x;
    	sort(p+1,p+1+n,cmpx);
    	Sol();
    	
    	for(int i=1;i<=n;++i)p[i].y=-p[i].y;
    	sort(p+1,p+1+n,cmpx);
    	Sol();
    	
    	for(int i=1;i<=n;++i){
    		ans=min(ans,p[i].maxdist-p[i].mindist);
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    

      

    自己还是太辣鸡了
  • 相关阅读:
    CSS命名法
    CSS伪类
    CSS总结
    CSS应用给网页元素的几种方式总结
    CSS语法小记
    细谈WEB标准
    Spark 个人实战系列(1)--Spark 集群安装
    HBase 实战(1)--HBase的数据导入方式
    shell 脚本实战笔记(9)--linux自动批量添加用户
    shell 脚本实战笔记(8)--ssh免密码输入执行命令
  • 原文地址:https://www.cnblogs.com/zzyer/p/8504241.html
Copyright © 2020-2023  润新知