博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #401 (Div. 2) E. Hanoi Factory 栈
阅读量:5116 次
发布时间:2019-06-13

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

E. Hanoi Factory

链接:

题解:

排序b从小到大,在b相同排序a从小到大,使其满足如果i-1不能取,那么i-2也不能取,

这样从后往前推入栈,如果不满足推出栈直到满足再推入栈,每次推入的答案记录最大值即可。

代码:

1 #include  2 #include 
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 using namespace std;14 #define rep(i,a,n) for (int i=a;i<=n;i++)15 #define per(i,a,n) for (int i=n;i>=a;i--)16 #define pb push_back17 #define mp make_pair18 #define all(x) (x).begin(),(x).end()19 #define fi first20 #define se second21 #define SZ(x) ((int)(x).size())22 typedef vector
VI;23 typedef long long ll;24 typedef pair
PII;25 const ll mod = 1000000007;26 const int inf = 0x3f3f3f3f;27 const double eps = 1e-7;28 // head29 30 const int maxn = 1e5 + 7;31 32 struct Ring {33 int a, b;34 ll h;35 bool operator < (Ring r) {36 if (b == r.b) return a < r.a;37 return b < r.b;38 }39 }r[maxn];40 41 int main() {42 int n;43 cin >> n;44 rep(i, 1, n) cin >> r[i].a >> r[i].b >> r[i].h;45 sort(r + 1, r + 1 + n);46 stack
ms;47 ll ans = 0, sum = 0;48 per(i, 1, n) {49 while (1) {50 if (ms.empty()) break;51 if (ms.top().b >= r[i].b && ms.top().a < r[i].b) break;52 sum -= ms.top().h;53 ms.pop();54 }55 ms.push(r[i]);56 sum += r[i].h;57 ans = max(ans, sum);58 }59 cout << ans << endl;60 return 0;61 }

 

转载于:https://www.cnblogs.com/baocong/p/6441536.html

你可能感兴趣的文章
转-求解最大连续子数组的算法
查看>>
对数器的使用
查看>>
【ASP.NET】演绎GridView基本操作事件
查看>>
ubuntu无法解析主机错误与解决的方法
查看>>
尚学堂Java面试题整理
查看>>
MySQL表的四种分区类型
查看>>
[BZOJ 3489] A simple rmq problem 【可持久化树套树】
查看>>
STM32单片机使用注意事项
查看>>
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
Loj #139
查看>>
hihocoder1187 Divisors
查看>>
Azure 托管镜像和非托管镜像对比
查看>>
js window.open 参数设置
查看>>
032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
查看>>
Ubuntu下安装MySQL及简单操作
查看>>
前端监控
查看>>
clipboard.js使用方法
查看>>
移动开发平台-应用之星app制作教程
查看>>
leetcode 459. 重复的子字符串(Repeated Substring Pattern)
查看>>