【USACO 2017 December Silver】Milk Measurement题解

本文介绍了USACO 2017 December Silver竞赛中的Milk Measurement题目,涉及奶牛产奶量变化的记录和计算。通过线段树优化,解决空间问题,并针对不同情况讨论解决方案,以确定奶牛产奶量最高照片更新的次数。
摘要由CSDN通过智能技术生成

Description
最初,农夫约翰的每头奶牛每天生产G加仑的牛奶(1≤G≤10^9)。由于随着时间的推移,奶牛的产奶量可能会发生变化,农夫约翰决定定期对奶牛的产奶量进行测量,并将其记录在日志中。
他的日志中的记录如下:
35 1234 -2
14 2345 +3
第一个条目表明:在第35天,1234号奶牛的产奶量比上次测量时降低了2加仑。
第二个条目表明:在第14天,2345号奶牛的产奶量比上次测量时增加了3加仑。
农夫约翰只有在任何一天内做最多一次测量的时间(即每天最多做一次测量,但可能不做)。不幸的是,约翰有点杂乱无章,他不一定按照时间顺序记下测量结果。为了保持奶牛的产奶动力,农夫约翰自豪地在谷仓的墙上展示了目前产奶量最高的奶牛的照片(如果有若干头奶牛的产奶量最高,他就会展示所有的图片)。

请求出约翰需要调整所展示的照片的次数。

请注意,农夫约翰有一大群奶牛。所以尽管日志中记录了一些奶牛改变了产奶量,但仍然还有很多奶牛的产奶量保持在G加仑。
Input
第一行是两个整数N和G,分别表示测量的次数和初始产奶量。
接下来N行,每行为一次测量。每行三个数:分别表示日期一(在整数1…106范围内),奶牛的编号(在整数1…109范围内),该奶牛的产奶量变化值(一个非负数)。无论如何,每头奶牛的产奶量永远保证在0…10^9范围内。
Output
请输出约翰总共调整所展示的照片的次数。
Sample Input
4 10
7 3 +3
4 2 -1
9 3 -1
1 1 +2
Sample Output
3
Solution
很明显是一道数据结构题,用各种数据结构维护一些值,然后分各种情况讨论。但是我们发现,奶牛的数量有10^9只,所以我们要优化。我们发现,会用到的奶牛最多只有1000000只,所以我们可以用map来离散化,这样就可以压缩空间。
用线段树维护后,我们分几种情况讨论,满足这几种情况的话答案++:

有5个值,分别是:max修改之前的最大值,max2修改前的第二大值,maxs修改前最大值的数量,pre我们当前要修改的奶牛原本的值,now这头奶牛修改后的值。
那么就有几种情况:
1、pre<MAX&&nw>=MAX
2、preMAX&&nw<MAX&&MAXS>1
3、pre
MAX&&nw<=MAX2&&MAXS1
4、pre
MAX&&nw>MAX&&MAXS>1

不难理解,自己慢慢领悟。

#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
const int N=1e5+5;
int n,m,cnt=0,pre,nw,MAX,MAX2,MAXS,ans=0,tree[N<<2][3];
int read() {
   
	int s=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') {
   
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
		s=(s<<1)+(s<<3)+(ch^48),ch=getchar();
	return s*f;
}
s
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值