CodeForces 777E Hanoi Factory (贪心+单调栈)

2 篇文章 0 订阅

题意:有n个环给你内环半径、外环半径和高度,叠这些环还要满足以下要求:
   ①:下面的环的外径要>=上面的环外径
   ②:环不能掉下去,所以下面的环的内径要<上面的环的外径
   ③:叠出最大高度

题解:贪心+单调栈
上面的外径要小于等于下面的外径,且大于下面的内径。
我们先以外径为第一指标,内径为第二指标进行递减排序。
用栈模拟,依序遍历,若当前的环外径 ≤ 下面环的内径,那么当前及之后的环都不可能叠加上去,然后我们将栈中元素取出,直到找到当前环能够存在的最高位置,更新 a n s ans ans即可。

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<fstream>
#include<set>
#include<map>
#include<sstream>
#include<iomanip>
#define ll long long
using namespace std;
int n;
ll sum, ans;
struct node {
	int wai, nei, h;
}r[100005];
bool cmp(node& a, node& b) {
	return a.wai == b.wai ? a.nei > b.nei : a.wai > b.wai;
}
stack<node> s;
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) scanf("%d%d%d", &r[i].nei, &r[i].wai, &r[i].h);
	sort(r + 1, r + n + 1, cmp);
	for (int i = 1; i <= n; i++) {
		while (!s.empty() && s.top().nei >= r[i].wai) {
			sum -= s.top().h;
			s.pop();
		}
		s.push(r[i]);
		sum += r[i].h;
		ans = max(ans, sum);
	}
	printf("%lld\n", ans);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值