P3114 [USACO15JAN]踩踏Stampede
我一开始看错题了,看成每秒走\(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;
}
P3114 [USACO15JAN]踩踏Stampede的更多相关文章
- [USACO15JAN]踩踏Stampede
[USACO15JAN]踩踏Stampede 题目描述 DJ站在原点上向y轴正半轴看,然后有一群奶牛从他眼前飞过.这些奶牛初始都在第二象限,尾巴在(Xi,Yi),头在(Xi+1,Yi),每Ci秒向右走 ...
- words
conscious[英][ˈkɒnʃəs][美][ˈkɑnʃəs]consensus[英][kənˈsensəs][美][kənˈsɛnsəs] scious sensuswaterflood; de ...
- 品牌营销:不要Beat,要逼格!
品牌营销:不要Beat,要逼格! 奥美的创始人大卫·奥格威说,广告营销应当是"具有风度的推销产品".而当下的营销手段,"风度"早已被抛之脑后, ...
- 布里斯班Twilight Bay Run半程马拉松
自从8月3日跑了半马以后,又一鼓作气报了11月份的西昌马拉松.与第一次马拉松的只求完赛目标不同,第二次当然想取得一个更好的成绩.所以8月份练的比较猛,基本上是练2.3天休息一天,周么还要拉个长于21公 ...
- Bzoj3041 水叮当的舞步
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 132 Solved: 75 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物 ...
- DevOps is dirty work - CI drives you crazy
一直很想谈谈Continuous Integration(CI),持续集成. 就在不久前一次朋友聚会上,一个刚刚跳槽到一家创业公司的朋友跟我抱怨说他们没有CI,没有code review,要做点事太累 ...
- 【SIGGRAPH】【最终幻想XV】的战斗场景实时演示的要点解说
[SIGGRAPH][最终幻想XV]的战斗场景实时演示的要点解说 原文:西川善司 http://www.4gamer.net/games/999/G999902/20160730004/ ...
- 【4412嵌入式开发板学习笔记】认识uboot
转自迅为讨论群:http://www.topeetboard.com 重要说明:这份笔记不是4412开发配套的,是我在网上看视频的时候下载上课老师的笔记后修改的.所以我试了一下笔记上的uboot命令, ...
- UIView.frame的骗局
如果你刚刚开始接触IOS编程, 刚刚接触UIKit, 肯定会被 frame, bounds, center, layer.anchorPoint, layer.position 这些乱七八糟得属性折腾 ...
随机推荐
- android so壳入口浅析
本文转自http://www.9hao.info/pages/2014/08/android-soke-ru-kou-q 前言 开年来开始接触一些加固样本,基本都对了so进行了处理,拖入ida一看 ...
- go语言之行--简介与环境搭建
一.Go简介 Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后 ...
- 20155308《网络对抗》Exp9 Web安全基础实践
20155308<网络对抗>Exp9 Web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 SQL注入攻击原理,如何防御? 原理:攻 ...
- 20155313 杨瀚 《网络对抗技术》实验一 PC平台逆向破解(5)M
exp1 PC平台逆向破解(5)M 一.实验内容 1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发 ...
- 20155334 《网络攻防》 Exp6 信息搜集与漏洞扫描
20155334 Exp6 信息搜集与漏洞扫描 一.实验问题回答 哪些组织负责DNS,IP的管理? 答:互联网名称与数字地址分配机构 ICANN ,该机构决定了域名和IP地址的分配.负责协调管理DNS ...
- P2463 [SDOI2008]Sandy的卡片
写一种\(O(nm)\)的做法,也就是\(O(\sum 串长)\)的. 先通过差分转化,把每个数变成这个数与上一个数的差,第一个数去掉,答案就是最长公共子串+1 按照套路把所有串拼起来,中间加一个分隔 ...
- idea 中全局查找不到文件 (两shift),单页搜索不到关键字的原因
全局查找不到文件是因为把要找的目录的本级或者上级设置为了额外的,所以自然找不到 而单页搜索不到内容是因为设置了words关键字,这个要全部都输入完才能找到(也就是整个关键字进行匹配,匹配到了整体才会查 ...
- CTE 递归查询全解
TSQL脚本能实现递归查询,用户使用共用表表达式 CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询.本文详细介绍CTE递归调用的特性和使用示例,递归查询 ...
- SpringBoot配置Aop笔记【例子】
众所周知,spring最核心的两个功能是aop和ioc,即面向切面,控制反转.这里我们探讨一下如何使用spring aop. 1.何为aop aop全称Aspect Oriented Programm ...
- 10、Dockerfile实战-PHP
一.镜像制作步骤 安装编译依赖包 编译安装 配置 二.编写Dockerfile FROM centos:7 MAINTAINER QUNXUE RUN yum install -y gcc gcc-c ...