[BZOJ4709] [Jsoi2011] 柠檬
时间:2019-10-26
本文章向大家介绍[BZOJ4709] [Jsoi2011] 柠檬,主要包括[BZOJ4709] [Jsoi2011] 柠檬使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
[BZOJ4709] [Jsoi2011] 柠檬
用斜率优化维护转移,每次转移只转移当前点的颜色,这一定最优
注意斜率优化的查询不具有单调性,顾要用单调栈+二分维护
由于有多种颜色,我用一个\(vector\)来维护多个单调栈
const int N=1e5+10,P=1e9+7;
int n;
int a[N];
ll s[N];
#define chk(a,b) ((a<b)&&(a=b))
int cnt[N];
ll dp[N];
struct Node {
ll a,b;
};
vector <Node> G[N];
int main(){
n=rd();
rep(i,1,n) {
int x=rd();
int &c=cnt[x];
ll w=1ll*c*c*x+dp[i-1];
while(G[x].size()>1 && (G[x][G[x].size()-1].b-G[x][G[x].size()-2].b)*(c-G[x][G[x].size()-1].a) < (w-G[x][G[x].size()-1].b)*(G[x][G[x].size()-1].a-G[x][G[x].size()-2].a) ) G[x].pop_back(); // 单调栈
G[x].push_back((Node){c,w});
c++;
int l=1,r=G[x].size()-1,res=0;
while(l<=r) {
int mid=(l+r)>>1;
if( (G[x][mid].b-G[x][mid-1].b)>=2*x*c*(G[x][mid].a-G[x][mid-1].a)) l=mid+1,res=mid;
else r=mid-1;
} // 二分
w=G[x][res].b-2ll*x*c*G[x][res].a+1ll*c*c*x;
dp[i]=max(dp[i-1],w);
}
printf("%lld\n",dp[n]);
}
原文地址:https://www.cnblogs.com/chasedeath/p/11743159.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 三阴性乳腺癌表达数据分析笔记之PAM50
- Celery入门
- TO-do api
- 炫酷,Spring Boot + ECharts 实现用户访问地图可视化(附源码)
- 互联网大厂常考算法及套路深度解析
- 2020--Python语法常考知识点
- 为什么你画的Seurat包PCA图与别人的方向不一致?
- 用Python程序模拟300位观众,为5位嘉宾随机投票,最后按照降序排列结果
- Python知识点
- 上盘硬菜,@Transaction源码深度解析 | Spring系列第48篇
- Python--网络编程和并发
- HashMap常见问题(更新中)
- 使用SNVSniffer软件找somatic mutation
- 腾讯云cvm 内存使用率监控指标解读
- Redis常见面试题