博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 4709: [Jsoi2011]柠檬
阅读量:6311 次
发布时间:2019-06-22

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

斜率优化,没有细节

#include
#include
#include
using namespace std;long long g[1000005],f[1000005],a[1000005],b[1000005],c[1000005],d[1000005],last[1000005];struct node{ long long k,b;}line[1000005];vector
vec[1000005];double check(node a,node b){ double x=((double)b.b-a.b)/(a.k-b.k); return x;}int main(){ int n; scanf("%d",&n); for (int i=1; i<=n; i++){ scanf("%lld",&a[i]); c[i]=c[last[a[i]]]+1; b[i]=c[i]+1; d[i]=a[i]*c[i]*2; last[a[i]]=i; } for (int i=1; i<=n; i++){ g[i]=f[i-1]+a[i]*c[i]*c[i]; line[i]=(node){-d[i],g[i]}; int C=a[i]; int tail=(int)vec[C].size()-1; while (tail>=1 && check(vec[C][tail],vec[C][tail-1])<=check(line[i],vec[C][tail])) vec[C].pop_back(),tail--; vec[C].push_back(line[i]); int L=0,R=(int)vec[C].size()-1; while (L
>1; double l,r; if (mid==0) r=-1ll<<60; else r=check(vec[C][mid],vec[C][mid-1]); if (mid==(int)vec[C].size()-1) l= 1ll<<60; else l=check(vec[C][mid],vec[C][mid+1]); if (b[i]>=l && b[i]<=r) { L=mid; break; } if (b[i]>r) R=mid-1; if (b[i]

  

 

转载于:https://www.cnblogs.com/silenty/p/9783920.html

你可能感兴趣的文章
find和xargs
查看>>
数据结构例程—— 交换排序之快速排序
查看>>
WKWebView代理方法解析
查看>>
IOS定位服务的应用
查看>>
[SMS&WAP]实例讲解制作OTA短信来自动配置手机WAP书签[附源码]
查看>>
IOS中图片(UIImage)拉伸技巧
查看>>
【工具】系统性能查看工具 dstat
查看>>
基于zepto或jquery的手机端弹出框成功,失败,加载特效
查看>>
php引用(&)
查看>>
Delphi 操作Flash D7~XE10都有 导入Activex控件 shockwave
查看>>
oracle 学习笔记之名词解释
查看>>
MySQL Cluster搭建与测试
查看>>
python数据分析画图体验
查看>>
军规15 确保集成和调用第三方APP
查看>>
Etcd和ZooKeeper,究竟谁在watch的功能表现更好?
查看>>
Shredding Company 碎纸机,dfs()枚举每一种情况,再加剪枝。
查看>>
命名空间和模块化编程 - C++快速入门39
查看>>
结构化程序设计03 - 零基础入门学习Delphi12
查看>>
今天才知道怎么插入代码!!!!!!!!!
查看>>
D2007在64位Win7出现 delphi 2007 assertion failure thread32.cpp 的解决办法
查看>>