zoukankan      html  css  js  c++  java
  • USACO14MAR The Lazy Cow(Gold)

    题目

    题意:平面上有 (n) 块草地,第 (i) 块草地坐标为 ((x_i,y_i)) ,上面有 (g_i) 个单位的草。Bessie 可以吃到距离起始点不超过 (k)(这里是曼哈顿距离)的所有草。帮 Bessie 选定起始点使它能吃到最多的草。

    看到曼哈顿距离,先转 (45) 度。这样 Bessie 吃的就是一个平行于坐标轴的正方形里的草。

    我们发现,对于一块草地,使 Bessie 能吃到它的起始点也一定在一个平行于坐标轴的正方形里,那么被这种正方形覆盖最多的位置就是选定的起始点了。

    对每块草地存下这样一个正方形,然后扫描线搞就好了。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    inline int max(int a,int b){return a>b?a:b;}
    #define M (L+R>>1)
    struct segment_tree{
    	int mx[1<<19],lz[1<<19];
    	void Down(int k){
    		mx[k<<1]+=lz[k];lz[k<<1]+=lz[k];
    		mx[k<<1|1]+=lz[k];lz[k<<1|1]+=lz[k];
    		lz[k]=0;
    	}
    	void Add(int l,int r,int a,int L,int R,int k){
    		if(l<=L&&R<=r){mx[k]+=a;lz[k]+=a;return;}
    		Down(k);
    		if(l<=M)Add(l,r,a,L,M,k<<1);
    		if(r>M)Add(l,r,a,M+1,R,k<<1|1);
    		mx[k]=max(mx[k<<1],mx[k<<1|1]);
    	}
    	int Max(){return mx[1];}
    }t;
    const int N=1e5+3;
    struct segment{int l,r,y,f;}a[N+N];
    bool Cmp(const segment&a,const segment&b){return a.y==b.y?a.f>b.f:a.y<b.y;}
    int n,m,ans,x[N],y[N],value[N],tmp[N+N],k;
    inline void Rotate(int&x,int&y){int tmpx=x,tmpy=y;x=tmpx+tmpy,y=tmpy-tmpx;}
    signed main(){
    	int l,r;
    	scanf("%d%d",&n,&m);m<<=1;
    	for(int i=1;i<=n;i++){
    	  scanf("%d%d%d",value+i,x+i,y+i);
    	  Rotate(x[i],y[i]);
    	  tmp[i]=x[i],tmp[i+n]=x[i]+m;
    	}
    	std::sort(tmp+1,tmp+1+n+n);
    	k=0;
    	tmp[0]=-1;
    	for(int i=1;i<=n+n;i++)
    	  if(tmp[i]!=tmp[i-1])tmp[++k]=tmp[i];
    	for(int i=1;i<=n;i++){
    	  l=std::lower_bound(tmp+1,tmp+1+k,x[i])-tmp;
    	  r=std::lower_bound(tmp+1,tmp+1+k,x[i]+m)-tmp;
    	  a[i]=(segment){l,r,y[i],value[i]};
    	  a[i+n]=(segment){l,r,y[i]+m,-value[i]};
    	}
    	std::sort(a+1,a+1+n+n,Cmp);
    	for(int i=1;i<=n+n;i++){
    	  t.Add(a[i].l,a[i].r,a[i].f,1,n+n,1);
    	  ans=max(ans,t.Max());
    	}
    	printf("%d",ans);
    	return 0;
    }
    
  • 相关阅读:
    GCD与LCM
    命名空间的使用
    [模板][持续更新]欧拉回路与欧拉路径浅析
    二进制GCD算法解析
    [模板]LCA的倍增求法解析
    [模板]字符串哈希的简易做法
    11、Android--屏幕适配
    10、Android--Shape
    09、Android--Fragment
    08、Android--BroadcastReceiver
  • 原文地址:https://www.cnblogs.com/Camp-Nou/p/11823551.html
Copyright © 2011-2022 走看看