题目

题意:平面上有 \(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;
}

USACO14MAR The Lazy Cow(Gold)的更多相关文章

  1. BZOJ3476 : [Usaco2014 Mar]The Lazy Cow

    旋转坐标系后转化为正方形,$x'=x+y$,$y'=x-y+1000001$,$k'=2k-1$ 两根扫描线从左往右扫 f[i]表示y坐标下边界为i时的价值和 每次加入/删除一个点等价于一段区间加减 ...

  2. USACO The Lazy Cow

    题目描述 这是一个炎热的夏天,奶牛贝茜感觉到相当的疲倦而且她也特别懒惰.她要在她的领域中找到一个合适的位置吃草,让她能吃到尽可能多的美味草并且尽量只在很短的距离.奶牛贝茜居住的领域是一个 N×N 的矩 ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  5. POJ 题目分类(转载)

    Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...

  6. HDU——PKU题目分类

    HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...

  7. (转)POJ题目分类

    初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推. ...

  8. poj分类

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

  9. 转载 ACM训练计划

    leetcode代码 利用堆栈:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/http://oj.leetcode. ...

随机推荐

  1. Log4j2配置之Appender详解

    Log4j2配置之Appender详解 Appender负责将日志事件传递到其目标.每个Appender都必须实现Appender接口.大多数Appender将扩展AbstractAppender,它 ...

  2. php链接redis (带密码)常用的redis方法

    连接redis $redis = new Redis(); $redis->connect($host, $port); $redis->auth('my pass'); //密码验证 常 ...

  3. php栈的定义和出栈、入栈的实现

    栈是线性表的一种,他的特点是后入先出,可以这么理解,栈就像一个存东西的盒子,先放进去的在最底层,后放进去的在上层,因为上层的东西把底层的东西压住了,下层的想要出去就必须把上层的先拿开才行. 定义:栈是 ...

  4. 数据结构-二叉搜索树Java实现

    1,Node.java 生成基础二叉树的结构 package com.cnblogs.mufasa.searchTree; /** * 节点配置父+左+右 */ public class Node{ ...

  5. 进阶Java编程(8)反射应用案例

    1,反射实例化对象 经过一系列分析之后可以发现虽然获得了Class类的实例化对象但是依然觉得这个对象获取的意义不是很大,所以为了进一步的帮助大家理解反射的核心意义所在,下面将通过几个案例进行说明(都是 ...

  6. c#操作word书签

    因项目需要,给word文档的书签赋值,框架没有相关内容,于是自己上网加上查看文档,成功搞定该功能.下面是我的实现过程: 首先需要引用nuget包: Microsoft.Office.Interop.W ...

  7. JS基础_while的练习1

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. pymssql文档(转)

    pymssql methods set_max_connections(number) -- Sets maximum number of simultaneous database connecti ...

  9. 【ExtJs】ext前台中的日期控件传输时间到后台的转换保存过程

    //前台日期选择框 {fieldLabel:, padding: ',afterLabelTextTpl: required,allowBlank: false,format: 'Y-m-d H:i: ...

  10. Android Jetpack之WorkManager: 观察结果

    在使用WorkManager的时候,有时候需要关注任务执行的结果和状态,可以使用 LiveData<WorkInfo> liveOpStatus = WorkManager.getInst ...