[Usaco2009 Feb]庙会捷运Fair Shuttle

news/2025/1/12 0:47:38/

Description
公交车一共经过N(1<=N<=20000)个站点,从站点1一直驶到站点N。K(1<=K<=50000)群奶牛希望搭乘这辆公交车。第i群牛一共有Mi(1<=Mi<=N)只.

他们希望从Si到Ei去。
公交车只能座C(1<=C<=100)只奶牛。而且不走重复路线,请计算这辆车最多能满足多少奶牛听要求。
注意:对于每一群奶牛,可以部分满足,也可以全部满足,也可以全部不满足。

Input
第1行: 三个整数: K,N,C。 由空格隔开。

第2..K+1行:第i+1行,告诉你第i组奶牛的信息: S_i, E_i and M_i。由空格隔开。

Output
一行:可以在庙会乘坐捷运的牛的最大头数

Sample Input
8 15 3
1 5 2
13 14 1
5 8 3
8 14 2
14 15 1
9 12 1
12 15 2
4 6 1

Sample Output
10

HINT
公交车可以把2头奶牛从展台1送到展台5,3头奶牛从展台5到展台8, 2头奶牛从展台8 到展台14,1头奶牛从展台9送到展台12,一头奶牛从展台13送到展台14, 一头奶牛从 14送到15。

这个题目的贪心思想显而易见,我们肯定要让下车早的奶牛上车,其次就是上车晚的。然后如何判断能上多少奶牛呢?用线段树记录每个时间点,车上还有多少空位,然后大力维护一波就可以了

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();for (;ch<'0'||ch>'9';ch=getchar())  if (ch=='-')    f=-1;for (;ch>='0'&&ch<='9';ch=getchar())   x=(x<<3)+(x<<1)+ch-'0';return x*f;
}
inline void print(int x){if (x>=10) print(x/10);putchar(x%10+'0');
}
const int N=5e4,M=2e4;
int n,m,K;
int root=1;
struct AC{int l,r,val;void join(int x,int y,int z){l=x,r=y,val=z;}bool operator <(const AC &x)const{return r!=x.r?r<x.r:l>x.l;}
}A[N+10];
struct Tree{#define ls (p<<1)#define rs ((p<<1)|1)int Min[M*16+10],lazy[M*16+10];void updata(int p){Min[p]=min(Min[ls],Min[rs]);}void pushdown(int p){//“懒惰”标记if (!lazy[p])   return;lazy[ls]+=lazy[p];lazy[rs]+=lazy[p];Min[ls]+=lazy[p];Min[rs]+=lazy[p];lazy[p]=0;}void build(int p,int l,int r){if (l==r){Min[p]=K;return;}//开始空位为Kint mid=(l+r)>>1;build(ls,l,mid),build(rs,mid+1,r);updata(p);}int get(int p,int l,int r,int x,int y){pushdown(p);if (x<=l&&r<=y) return Min[p];int mid=(l+r)>>1,ans1=inf,ans2=inf;if (x<=mid) ans1=get(ls,l,mid,x,y);if (y>mid)  ans2=get(rs,mid+1,r,x,y);if (ans1==inf&&ans2==inf)   return 0;return min(ans1,ans2);}void change(int p,int l,int r,int x,int y,int t){pushdown(p);if (x<=l&&r<=y){Min[p]+=t,lazy[p]+=t;return;}int mid=(l+r)>>1;if (x<=mid) change(ls,l,mid,x,y,t);if (y>mid)  change(rs,mid+1,r,x,y,t);updata(p);}
}T;
int main(){n=read(),m=read(),K=read();int ans=0;for (int i=1,x,y,z;i<=n;i++)    x=read(),y=read()-1,z=read(),A[i].join(x,y,z);//因为在时刻r奶牛已经下车了,所以右端点要--sort(A+1,A+1+n);T.build(1,1,m);for (int i=1;i<=n;i++){int l=A[i].l,r=A[i].r;int tmp=min(A[i].val,T.get(1,1,m,l,r));//看看能上多少奶牛,上不了的就干脆别上了(不是vip不能挤上车)if (tmp)    T.change(1,1,m,l,r,-tmp),ans+=tmp;//更新,包括答案的更新和线段树的更新}printf("%d\n",ans);return 0;
}

http://www.ppmy.cn/news/869731.html

相关文章

Usaco Training Section 4.4 Shuttle Puzzle

要将W...W_B...B变成B...B_W...W&#xff0c;每次可以1、交换空格和相邻格&#xff1b;2、你可以把一个棋子跳过一个(仅一个)与它不同色的棋子到达空格。用最少步数&#xff0c;打印出每次移动的棋子&#xff08;最小的一组解&#xff09; 直接dfs&#xff0c;要优化。很明显W…

MapReduce中Shuttle过程的理解

MapReduce中Shuttle过程的理解--转自&#xff1a;http://langyu.iteye.com/blog/992916 Shuffle过程是MapReduce的核心&#xff0c;也被称为奇迹发生的地方。要想理解MapReduce&#xff0c; Shuffle是必须要了解的。我看过很多相关的资料&#xff0c;但每次看完都云里雾里的绕着…

USACO 4.4 Shuttle Puzzle(数学)

2015-03-25 22:21:59 思路&#xff1a;一道找规律的题... 一开始没啥思路&#xff0c;看了别人博客才知道... N3&#xff1a;3 5 6 4 2 1 3 5 7 6 4 2 3 5 4 差&#xff1a; 2 1 -2 -2 -1 2 2 2 -1 -2 -2 1 2 -1 N4&#xff1a;4 6 7 5 3 2 4 6 8 9 7 5 3 1 2 4 6 8 7 5 3 4 6…

R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型

R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型 目录 R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型

Shuttle ESB(三)——架构模型介绍(2)

上一篇文章中&#xff0c;介绍了Shuttle ESB架构模型中的三个重要部分。 今天&#xff0c;我们继续介绍剩余的三个内容&#xff1a;模式和消息路由。 四、模式 Request/Response(请求/响应模式) 对基于Request/Response消息机制的内容。你能够看WiKi的一些文章&#xff1a;http…

P1607 [USACO09FEB]Fair Shuttle G

P1607 [USACO09FEB]Fair Shuttle G 题意 现在又n头牛&#xff0c;分成了k组&#xff0c;每一组有三个值&#xff0c;s、e、m&#xff0c;分别表示&#xff0c;这一组牛从s到e&#xff0c;并且这一组里面有m头牛&#xff0c;现在有一辆车&#xff0c;一次只能装c头牛&#xff…

Codeforces Gym 101521A Shuttle Bus

题意&#xff1a;给定一个2*N的方格&#xff0c;从左上角开始走&#xff0c;有些格子不能走&#xff0c;问能否一次遍历所有能走的方格 再加上&#xff08;2&#xff0c;2&#xff09;点不能走&#xff0c;这几种情况&#xff1b; 应该差不多了&#xff0c; 主要是 找奇偶关系…

Shuttle Puzzle[USACO]

开始试图找挪动的规律&#xff0c;找了半天&#xff0c;成功的挪动规律虽然没找到&#xff0c;但发现了失败的规律。如果出现两个连续的W或B&#xff0c;而它的连续没能连续到边界&#xff0c;则铁定失败。如&#xff1a;...W..BB..W.. 或者 ..B..WW..B.. 于是&#xff0c;可以…