博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Luogu】P1607庙会班车Fair Shuttle(线段树+贪心)
阅读量:5157 次
发布时间:2019-06-13

本文共 2154 字,大约阅读时间需要 7 分钟。

   我不会做啊……贪心题啊……题啊……啊……

   我真TM菜爆了啊……

   这题就像一样,把终点排序,终点相同的按起点排序。然后维护一个查询最大值的线段树。对于一个区间[l,r],如果这个区间已经有的最大值为s,那么这个区间最多还能装下c-s头奶牛。

   当然奶牛数量没那么多的话我也是没有办法

   最后说一句,奶牛到终点就下车了,可以给别的奶牛腾空间,不计入个数。所以奶牛在车上的区间为[l,r-1]。

#include 
#include
#include
#define N 100001#define min(x, y) ((x) < (y) ? (x) : (y))#define max(x, y) ((x) > (y) ? (x) : (y))#define root 1, 1, n#define ls now << 1, l, mid#define rs now << 1 | 1, mid + 1, rint k, n, c, ans;int sum[N << 2], add[N << 2];struct node{ int s, t, m;}p[N];inline int read(){ int x = 0, f = 1; char ch = getchar(); for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1; for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0'; return x * f;}inline bool cmp(node x, node y){ return x.t < y.t;}inline void pushdown(int now){ if(add[now]) { sum[now << 1] += add[now]; sum[now << 1 | 1] += add[now]; add[now << 1] += add[now]; add[now << 1 | 1] += add[now]; add[now] = 0; }}inline int query(int now, int l, int r, int x, int y){ if(x <= l && r <= y) return sum[now]; pushdown(now); int mid = (l + r) >> 1, ret = 0; if(x <= mid) ret = max(ret, query(ls, x, y)); if(mid < y) ret = max(ret, query(rs, x, y)); return ret;}inline void update(int now, int l, int r, int x, int y, int d){ if(x <= l && r <= y) { sum[now] += d; add[now] += d; return; } pushdown(now); int mid = (l + r) >> 1; if(x <= mid) update(ls, x, y, d); if(mid < y) update(rs, x, y, d); sum[now] = max(sum[now << 1], sum[now << 1 | 1]);}int main(){ int i, x; k = read(); n = read(); c = read(); for(i = 1; i <= k; i++) { p[i].s = read(); p[i].t = read(); p[i].m = read(); } std::sort(p + 1, p + k + 1, cmp); for(i = 1; i <= k; i++) { x = query(root, p[i].s, p[i].t - 1); if(x < c) { update(root, p[i].s, p[i].t - 1, min(p[i].m, c - x)); ans += min(p[i].m, c - x); } } printf("%d\n", ans); return 0;}

 

转载于:https://www.cnblogs.com/cellular-automaton/p/7467364.html

你可能感兴趣的文章
显示器
查看>>
对文件 I/O,标准 I/O 的缓冲的理解
查看>>
Qt——绘图
查看>>
gbk,utf-8,unicode编码,单位换算
查看>>
离散数学 求偏序集中的极大元和极小元
查看>>
CS231n官方笔记授权翻译总集篇发布
查看>>
比较java枚举成员使用equal还是==
查看>>
PPI
查看>>
鲜为人知的空元素╮(╯▽╰)╭
查看>>
【随机过程】马尔可夫链(1)
查看>>
【CUDA开发】CUDA的安装、Nvidia显卡型号及测试
查看>>
【CUDA开发】 CUDA Thrust 规约求和
查看>>
std::copy ( myvector.begin(), myvector.end(), out_it )
查看>>
golang:reflect反射
查看>>
Oracle 安装后关于用户
查看>>
重新生成和组织索引
查看>>
关于Android导出apk时碰到的[Unable to execute dex: Multiple dex files define]
查看>>
64 位 win7 使用PLSQL Developer(转)
查看>>
Android Studio 引用 gson-2.6.2-sources
查看>>
新建jsp项目
查看>>