CF69B Bets 题解

题意简述


给定两个整数 nnmm。分别代表有 nn 条赛道,mm 个运动员。

接下来 mm 行,每行 4 个整数 li,ri,ti,cil_i , r_i , t_i , c_i。分别代表这位运动员从 lil_i 滑到 rir_i,每一段赛道花费的时间为 tit_i,这个赌注值 cic_i 卢布。

问最大收益是多少。

解题思路


建两个数组 maxx,monmaxx , mon,分别表示这一个赛道的最短时间和这个最短时间所对应的赌注的收益。

每次输入,枚举 lil_irir_i。如果这位选手的时间大于 maxximaxx_i,就更新这个 maxximaxx_imonimon_i

最后从 11nn 枚举一遍,累加 monimon_i 即可。

代码实现


#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int n,m,ans;
int maxx[1000005],mon[1000005];
int main() {
	memset(maxx,inf,sizeof(maxx));
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++) {
		int l,r,t,c; scanf("%d%d%d%d",&l,&r,&t,&c);
		for(int j=l;j<=r;j++) {
			if(t<maxx[j]) maxx[j]=t,mon[j]=c;
		}
	}
	for(int i=1;i<=n;i++) ans+=mon[i];
	printf("%d",ans);
	return 0;
}
//code by TheCedar