题目链接

我一开始看错题了,看成每秒走\(c_i\)个单位了,于是样例答案就变成了3。。害我调好久,还以为样例错了


对于每头奶牛,我们求出它经过\(y\)轴的时间段,然后离散化一下,将奶牛按照从低到高的顺序排序,区间上记录最新经过的奶牛,如果当前奶牛的区间都已经被覆盖过了,那么说明完全被遮挡,反之则可以被看到,这样的话由于已经排过序了,可以很容易看出这是正确的,用线段树实现即可

线段树我是这么实现的,初始值为无限大,\(update\)时直接覆盖修改的区间,这样查询区间最大值,只要不是无限大,就说明完全被遮挡

下面放代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cctype>
#define ll long long
#define gc getchar
#define maxn 50005
using namespace std; inline ll read(){
ll a=0;int f=0;char p=gc();
while(!isdigit(p)){f|=p=='-';p=gc();}
while(isdigit(p)){a=(a<<3)+(a<<1)+(p^48);p=gc();}
return f?-a:a;
}int n,ans,cnt,x[maxn],c[maxn];ll b[maxn<<1]; struct ahaha{
int h,l,r;
inline bool friend operator<(const ahaha x,const ahaha y){
return x.h<y.h;
}
}q[maxn]; struct ahaha1{
int v,lz;
ahaha1(){
v=1000001;
lz=-1;
}
}t[maxn<<3];
#define lc p<<1
#define rc p<<1|1
inline void pushup(int p){
t[p].v=max(t[lc].v,t[rc].v);
}
inline void pushdown(int p){
int &lz=t[p].lz;
t[lc].v=lz;t[lc].lz=lz;
t[rc].v=lz;t[rc].lz=lz;
lz=-1;
}
void update(int p,int l,int r,int L,int R,int z){
if(l>R||r<L)return;
if(L<=l&&r<=R){t[p].v=z;t[p].lz=z;return;}
int m=l+r>>1;if(~t[p].lz)pushdown(p);
update(lc,l,m,L,R,z);update(rc,m+1,r,L,R,z);
pushup(p);
}
int query(int p,int l,int r,int L,int R){
if(l>R||r<L)return -1;
if(L<=l&&r<=R)return t[p].v;
int m=l+r>>1;if(~t[p].lz)pushdown(p);
return max(query(lc,l,m,L,R),query(rc,m+1,r,L,R));
} int main(){
n=read();
for(int i=1;i<=n;++i){
x[i]=read();q[i].h=read();c[i]=read();
b[++cnt]=1ll*-x[i]*c[i];
b[++cnt]=1ll*(-x[i]-1)*c[i];
}
sort(b+1,b+cnt+1);cnt=unique(b+1,b+cnt+1)-b-1;
for(int i=1;i<=n;++i){
q[i].l=lower_bound(b+1,b+cnt+1,1ll*(-x[i]-1)*c[i])-b;
q[i].r=lower_bound(b+1,b+cnt+1,1ll*-x[i]*c[i])-b;
}
sort(q+1,q+n+1);
for(int i=1;i<=n;++i){
int v=query(1,1,cnt,q[i].l,q[i].r-1);
if(v==1000001)++ans;
update(1,1,cnt,q[i].l,q[i].r-1,q[i].h);
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. SharePoint 2010 类似人人网站内信功能实施
  2. 【WinForm】“System.Data.SqlClient.SqlConnection”的类型初始值设定项引发异常,无法识别的配置节 system.serviceModel
  3. WCF - net.pipe vs. net.tcp vs. http Bindings
  4. xen虚拟机安装实践
  5. nginx做下载限速
  6. IP地址和子网掩码
  7. eclipse 下,使用正常模式可以运行,DEBUG模式就卡住的解决方案
  8. .net基础学java系列(四)Console实操
  9. yarn一直在跑一个用户为dr.who的application
  10. vue自定义键盘事件
  11. spring与disruptor集成的简单示例[z]
  12. redis的应用场景 为什么用redis
  13. sax 动态切换 抓取感兴趣的内容(把element当做documnet 处理)
  14. c++中的this指针和c#中的this引用
  15. PHP字符串函数运用小案例
  16. Opencv基本数据类型
  17. nginx常用的超时配置说明
  18. haproxy-1.7.7 基于域名的调度配置
  19. 二十、curator recipes之NodeCache
  20. restful framework之认证组件

热门文章

  1. 【hdu4405】AeroplaneChess
  2. gdb中信号
  3. activiti发布APP时报错:关联的流程无效
  4. HDFS--大数据应用的基石
  5. jQuery.bsgrid
  6. MFC如何为程序添加图标
  7. STM32通用定时器原理
  8. JavaScript 变量提升
  9. Solr 后台查询实例 (工作备查)
  10. mybatis源码-解析配置文件(一)之XML的DOM解析方式