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 这些乱七八糟得属性折腾 ... 
随机推荐
- Java设置以及获取JavaBean私有属性进阶
			在上一篇博客中讲到使用Java提供的原生API设置以及获取一个JavaBean的私有属性. 但是使用Java的原生API过于复杂,有没有更加简单的方法呢?答案是肯定的.下面介绍一个开元工具包来非常方便 ... 
- cloudstack secondary vm starting
			等1个小时,差不多可以进入虚拟机,看日志/var/log/cloud.log 
- Storm 安装部署
			环境要求JDK 1.6+java -versionPython 2.6.6+python -V ZooKeeper3.4.5+storm 0.9.4+ 单机模式上传解压 $ .tar.gz $ cd ... 
- 前后台分离式开发(swagger)
			一.前后台分离开发(swagger) 1.安装maven 配置的maven环境变量 M2_HOME/MAVEN_HOME Path %M2_HOME%/bin 打开运行窗口:输入mvn -v,查看是否 ... 
- 约束布局constraint-layout导入失败的解决方案 - 转
			今天有同事用到了约束布局,但是导入我的工程出现错误 **提示错误: Could not find com.Android.support.constraint:constraint-layout:1. ... 
- Linux下Maven+SVN自动打包脚本
			公司的开发环境每次部署项目都很麻烦,需要手动打包并上传上去.这个太麻烦了,所以就准备搞个自动打包的脚本.脚本自动从svn代码库里面更新最新的代码下来,然后maven打包,最后把war包丢到to ... 
- PostgreSQL基础知识与基本操作索引页
			磨砺技术珠矶,践行数据之道,追求卓越价值 返回顶级页:PostgreSQL索引页 luckyjackgao@gmail.com 本页记录所有本人所写的PostgreSQL的基础知识和基本操作相关文摘和 ... 
- 【LG1368】工艺
			[LG1368]工艺 题面 洛谷 题解 好套路的一道题... 我们倍长这个字符串,然后我们要查询的串就为这个倍长过后串的长度\(n\)一个子串,要求字典序最小 然后就可以非常愉快地后缀排序了 后缀的话 ... 
- angular-ui-router速学
			Demo1 初始化 <html ng-app="app"> <head> <style>.active { color: red; font-w ... 
- CCNode详解
			cocos2d的所有类都以CC开头,那么实际上这个类的名字就是Node,类如其名,这个类的实例就是一个节点.Cocos2d的类是树状继承的,而在内存中,各个实例之间也是以“树”这种数据结构相关联的., ... 
