我们只要把每头牛开始遮挡视线和结束遮挡视线的时间点都搞出来就好= =

再按照y轴排序。。。然后变成线段覆盖了。。线段树搞一下就好了?

 /**************************************************************
Problem: 3888
User: rausen
Language: C++
Result: Accepted
Time:1204 ms
Memory:22684 kb
****************************************************************/ #include <cstdio>
#include <algorithm> using namespace std;
const int N = 1e5 + ; struct data {
int x, y, c;
int st, ed; inline void read() {
scanf("%d%d%d", &x, &y, &c);
x *= -, st = c * (x - ), ed = st + c;
} inline bool operator < (const data &p) const {
return y > p.y;
}
} a[N]; struct seg_node {
seg_node *ls, *rs;
int v;
} *seg_null, *seg_root, mempool[N << ], *cnt_seg = mempool; int n, ans;
int v[N];
int t[N << ], tot; #define Ls p -> ls
#define Rs p -> rs
#define V p -> v
#define mid (l + r >> 1)
inline void seg_get_null(seg_node *&p) {
p = cnt_seg, Ls = Rs = p;
} inline void seg_new(seg_node *&p) {
p = ++cnt_seg, *p = *seg_null;
} inline void seg_push(seg_node *p) {
if (V) {
Ls -> v = Rs -> v = V;
V = ;
}
} inline void seg_build(seg_node *&p, int l, int r) {
seg_new(p);
if (l == r) return;
seg_build(Ls, l, mid), seg_build(Rs, mid + , r);
} inline void seg_modify(seg_node *p, int l, int r, int L, int R, int v) {
if (L <= l && r <= R) {
V = v;
return;
}
seg_push(p);
if (L <= mid) seg_modify(Ls, l, mid, L, R, v);
if (mid < R) seg_modify(Rs, mid + , r, L, R, v);
} inline int seg_query(seg_node *p, int l, int r, int pos) {
if (l == r) return V;
seg_push(p);
if (pos <= mid) return seg_query(Ls, l, mid, pos);
else return seg_query(Rs, mid + , r, pos);
}
#undef Ls
#undef Rs
#undef V
#undef mid int main() {
int i;
scanf("%d", &n);
for (i = ; i <= n; ++i)
a[i].read();
sort(a + , a + n + );
for (i = ; i <= n; ++i)
t[i * - ] = a[i].st, t[i * ] = a[i].ed;
sort(t + , t + * n + );
tot = unique(t + , t + * n + ) - t;
for (i = ; i <= n; ++i) {
a[i].st = lower_bound(t + , t + tot + , a[i].st) - t;
a[i].ed = lower_bound(t + , t + tot + , a[i].ed) - t;
a[i].st *= , a[i].ed *= ;
}
tot *= ;
seg_get_null(seg_null);
seg_build(seg_root = seg_null, , tot);
for (i = ; i <= n; ++i)
seg_modify(seg_root, , tot, a[i].st, a[i].ed, i);
for (i = ; i <= tot; ++i)
v[seg_query(seg_root, , tot, i)] = ;
for (ans = , i = ; i <= n; ++i)
ans += v[i];
printf("%d\n", ans);
return ;
}

BZOJ3888 [Usaco2015 Jan]Stampede的更多相关文章

  1. [BZOJ 3888] [Usaco2015 Jan] Stampede 【线段树】

    题目链接:BZOJ - 3888 题目分析 首先,计算出每个线段在 x 坐标 0 处出现的时间开始点和结束点,就转成了时间轴上的线段. 然后就是看每条线段是否被 y 比它小的线段完全覆盖了.注意求出的 ...

  2. 3890: [Usaco2015 Jan]Meeting Time( dp )

    简单的拓扑图dp.. A(i, j), B(i, j) 表示从点 i 长度为 j 的两种路径是否存在. 用bitset就行了 时间复杂度O(m) --------------------------- ...

  3. [补档][Usaco2015 Jan]Grass Cownoisseur

    [Usaco2015 Jan]Grass Cownoisseur 题目 给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过? (一个点在路 ...

  4. BZOJ3887 [Usaco2015 Jan] Grass Cownoisseur 【tarjan】【DP】*

    BZOJ3887 [Usaco2015 Jan] Grass Cownoisseur Description In an effort to better manage the grazing pat ...

  5. bzoj3887: [Usaco2015 Jan]Grass Cownoisseur

    题意: 给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在路径中无论出现多少正整数次对答案的贡献均为1) =>有向图我们 ...

  6. BZOJ_3887_[Usaco2015 Jan]Grass Cownoisseur_强连通分量+拓扑排序+DP

    BZOJ_3887_[Usaco2015 Jan]Grass Cownoisseur_强连通分量+拓扑排序+DP Description In an effort to better manage t ...

  7. [bzoj3887][Usaco2015 Jan]Grass Cownoisseur_trajan_拓扑排序_拓扑序dp

    [Usaco2015 Jan]Grass Cownoisseur 题目大意:给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在 ...

  8. BZOJ3886 : [Usaco2015 Jan]Moovie Mooving

    f[i]表示用i集合内的电影可以达到的最长时间 f[i]向f[i|(1<<j)]更新,此时的时间为第j部电影在f[i]前的最晚上映时间 先排序一遍离散化后用前缀最大值解决 时间复杂度$O( ...

  9. bzoj3890 [Usaco2015 Jan]Meeting Time

    Description Bessie and her sister Elsie want to travel from the barn to their favorite field, such t ...

随机推荐

  1. C# DataGridView控件绑定数据后清空数据

    //1.this.dataGridView1.DataSource = null;//会将DataGridView的列也删掉 //2.this.dataGridView1.Columns.Clear( ...

  2. javascript权威指南笔记--javascript语言核心(三)

    1.var用来声明一个或多个变量.全局变量是全局对象的属性,它无法通过delete删除. 如果var语句中的变量没有指定初始化表达式,那么这个变量的初始值为undefined. 变量声明语句会被提前到 ...

  3. CI实践_Android持续集成

    之前已经实现了Android的持续集成,并在项目中应用了一段时间.恰逢现在有几分钟时间,把之前的一些零散的点滴记录和整理一下,供有需要的朋友参考,或后续复用. 需要的准备知识:gitlab.Jenki ...

  4. 讓 SourceTree 讀取自定的 SSH key

    我目前都在 Mac 底下開發,用 Git 來管理我的程式碼,比較一番之後決定用 SourceTree 來做為 Git client.SourceTree 是一款 Mac 底下的版本控制系統 clien ...

  5. LINUX一切皆文件

    只要用过linux的筒子,或者保守点说接触到一些linux思想的同志肯定听说过这样一句话,在linux下,“一切皆是文件”! 不错,今天walfred将在快速上手linux设备驱动这一块,谈谈linu ...

  6. 【HTML5 】<script>元素async,defer异步加载

    原文地址:HTML5′s async Script Attribute原文日期: 2010年09月22日翻译日期: 2013年08月22日 (译者注: 异步加载,可以理解为无阻塞并发处理.) (译者再 ...

  7. cocoapods ,错误大全

    出现这种警告 Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not us ...

  8. ie6 span 换行IE6中float:right换行问题的替代解决方案

    在IE6,IE7下使用<span>标签时,在加入右浮动样式后,会换行的bug解决方案: bug案例:新闻列表中,为使时间右对齐,加右浮动产生换行 <ul> <li> ...

  9. hiho_1067_最近公共祖先2

    题目大意 给出一棵家谱树,树中的节点都有一个名字,保证每个名字都是唯一的,然后进行若干次查询,找出两个名字的最近公共祖先. 题目链接最近公共祖先 分析 数据量大,根据题目提示,采用Tarjan + 并 ...

  10. azure git 托管

    azure git上传部署步骤:(首次提交)cd 至本地代码路径git initgit add .git commit –m "initial commit"git remote ...