经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
BZOJ4709: [Jsoi2011]柠檬(决策单调性)
来源:cnblogs  作者:自为风月马前卒  时间:2018/10/10 9:09:26  对本文有异议

题意

题目链接

Sol

结论:每次选择的区间一定满足首位元素相同。。

仔细想想其实挺显然的,如果不相同可以删掉多着的元素,对答案的贡献是相同的

那么设\(f[i]\)表示到第\(i\)个位置的最大价值,\(s[i]\)表示到\(i\)位置,\(a[i]\)的出现次数,转移方程为

\[f[i] = max(f_{j - 1} + a[i] * (s[i] - s[j] +1)^2)\]

满足\(a[i] = a[j]\)

看起来好像是可以斜率优化的样子,不过存在另外一种解释。。

具体看这里

感觉自己的斜率优化学的狠不到家啊,,有空补补qwq

  1. #include<bits/stdc++.h>
  2. #define chmax(a, b) (a = (a > b ? a : b))
  3. #define chmin(a, b) (a = (a < b ? a : b))
  4. #define LL long long
  5. //#define int long long
  6. using namespace std;
  7. const int MAXN = 1e6 + 10;
  8. inline int read() {
  9. int x = 0, f = 1; char c = getchar();
  10. while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
  11. while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  12. return x * f;
  13. }
  14. int N, a[MAXN], s[MAXN], cnt[MAXN]; LL f[MAXN];//s[i] i位置的数第几次出?
  15. vector<int> v[MAXN];
  16. LL calc(int pos, LL val) {
  17. return f[pos - 1] + 1ll * a[pos] * val * val;
  18. }
  19. int lower(int x, int y) {
  20. int l = 1, r = N, ans = N + 1;
  21. while(l <= r) {
  22. int mid = l + r >> 1;
  23. if(calc(x, mid - s[x] + 1) >= calc(y, mid - s[y] + 1)) r = mid - 1, ans = mid;
  24. else l = mid + 1;
  25. }
  26. return ans;
  27. }
  28. main() {
  29. N = read();
  30. for(int i = 1, siz, S; i <= N; i++) {
  31. s[i] = ++cnt[S = a[i] = read()];
  32. while((((siz = v[S].size()) >= 2) && (lower(v[S][siz - 2], v[S][siz - 1]) <= lower(v[S][siz - 1], i)))) v[S].pop_back();
  33. v[S].push_back(i);
  34. while(((siz = v[S].size()) >= 2) && (lower(v[S][siz - 2], v[S][siz - 1]) <= s[i]))v[S].pop_back();
  35. f[i] = calc(v[S][v[S].size() - 1], s[i] - s[v[S][v[S].size() - 1]] + 1);
  36. }
  37. cout << f[N];
  38. }
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号