Codeforces 629D Babaei and Birthday Cake(线段树优化dp)
来源:互联网 发布:幼儿园区域阅美工图片 编辑:程序博客网 时间:2024/06/04 08:53
题意:
分析:
实质为求最长上升子序列问题,设
dp[i] = max(dp[j], j >= 0 && j < i && v[j] < v[i]) + v[i];
但是
那么如何快速的获取满足
那么这样能否确保是按标号顺序进行叠放的呢?由于我们是从
代码:
#include<cstdio>#include<cmath>#include<iostream>#include<algorithm>using namespace std;//[)const int maxm = 100005, maxn = maxm<<2, INF = 0x3fffffff;#define pi acos(-1.0)typedef long long ll;ll dp[maxn];ll v[maxm], tv[maxm];void build(int k, int l, int r){ dp[k] = 0; if(l == r - 1) return; int mid = (l + r) / 2; build(2 * k + 1, l, mid); build(2 * k + 2, mid, r);}void update(int num, ll x, int k, int l, int r){ dp[k] = max(dp[k], x); if(l == r - 1) return; int mid = (l + r)/2; if(mid > num) update(num, x, k * 2 + 1, l, mid); else update(num, x, k * 2 + 2, mid, r);}ll query(int a, int b, int k, int l, int r){ if(a >= r||b <= l) return 0; else if(a <= l && b >= r) return dp[k]; else{ int mid = (l + r) / 2; ll ta = query(a, b, k * 2 + 1, l, mid); ll tb = query(a, b, k * 2 + 2, mid, r); return max(ta, tb); }}int main (void){ int n;scanf("%d",&n); int r, h; for(int i = 0; i < n; i++){ scanf("%d%d",&r,&h); tv[i] = v[i] =(ll) r * r * h; } sort(tv, tv + n); int tot = unique(tv, tv + n) - tv; build(0, 0, tot); ll res = 0; for(int i = 0; i < n; i++){ int pos = lower_bound(tv, tv + tot, v[i]) - tv; ll tmp = query(0, pos, 0, 0, tot) + v[i]; res = max(res, tmp); update(pos, tmp, 0, 0, tot); } printf("%.10lf\n", res * pi); return 0;}
0 0
- Codeforces 629D Babaei and Birthday Cake(线段树优化dp)
- codeforces 629 D. Babaei and Birthday Cake dp + 线段树
- codeforces 629D-Babaei and Birthday Cake(dp && 线段树或树状数组离散优化)
- Codeforces 629D Babaei and Birthday Cake 【线段树优化dp】
- codeforces #343 div2 D. Babaei and Birthday Cake(DP+离散化+线段树优化)
- CodeForces 629D Babaei and Birthday Cake(线段树维护DP)
- CodeForces 629 D.Babaei and Birthday Cake(dp+线段树)
- Codeforces 629D - Babaei and Birthday Cake 线段树
- CF 629 D. Babaei and Birthday Cake 线段树+DP
- Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake(线段树+离散化优化DP)
- Codeforces 629D Babaei and Birthday Cake【dp+线段树+离散化】
- Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake(线段树+dp)
- Codeforces 629D Babaei and Birthday Cake LIS+线段树优化
- Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
- cf - 629D Babaei and Birthday Cake(DP+线段树维护)
- Codeforces 629D Babaei and Birthday Cake(DP)
- codeforces #334 D. Babaei and Birthday Cake (线段树或者dp+二分)
- CODEFORCES 629 D Babaei and Birthday Cake
- 网络数据包传输过程总结
- 手势(Gesture)
- 面试题五:从尾到头打印链表|剑指offer
- encodeURI来解决URL传递时的中文问题
- NSString从字符串开头截取到指定字符的位置
- Codeforces 629D Babaei and Birthday Cake(线段树优化dp)
- 【PB】如何创建一个动态的数据窗口对象?
- python中sys.path使用
- js的with语句使用方法
- 使用Markdown编辑器写博客
- 在excel表中如何实现手动换行
- Python中用format函数格式化字符串的用法
- java 加密技术
- python正则表达式(re)