类似于斜率优化的东西,果真CF的E以后才会考点算法啊。

感觉这种优化应该很常见,但这题直线只有第一象限的,但是插入,和查找操作是不变的,按极角排序后就可以直接用这个模板了。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std; typedef long long ll; struct Line
{
ll a,b;
ll get(ll x)
{
return a*x+b;
}
}; struct Convex_Hull
{
int size;
Line ls[];
void init()
{
size=;
}
bool is_bad(int one,int two,int three)//目前凸包集为xxx12 要将3插入,判断是否删除2
{
Line l1=ls[one],l2=ls[two],l3=ls[three];
return (l2.b-l1.b)*(l1.a-l3.a)>=(l3.b-l1.b)*(l1.a-l2.a);//我这样肯定可以!
}
void add_line(ll a,ll b)
{
ls[size++] = Line{a,b};//这样写也可以?
while(size>= && is_bad(size-, size-, size-) )
{
ls[size-] = ls[size-]; size--;
}
}
ll query(ll x)
{
int b=-,d=size-;
while(d-b > )
{
int mid=(b+d)/;
if( ls[mid].get(x) <= ls[mid+].get(x) )
{
b = mid;
}
else d = mid;
}
return ls[d].get(x);
}
}; #define N 200200 ll sum[N];
ll ans,tans;
Convex_Hull cv;
int g[N]; int main() {
int n;
cin>>n;
sum[]=;
for(int i=;i<=n;i++)
{
scanf("%d",g+i);
sum[i] = sum[i-]+g[i];
ans += (ll)i*g[i];
}
cv.init();
for(int i=;i<=n;i++)
{
cv.add_line(i-, -sum[i-]);
tans = max(tans,cv.query(g[i])+sum[i-]-(ll)i*g[i]);
} //第二遍,逆着写。
cv.init();
for(int i=n-;i>=;i--)
{
cv.add_line(-(i+), -sum[i+]);
tans = max(tans,cv.query(-g[i])+sum[i]-(ll)i*g[i]);
}
cout<<ans+tans<<endl;
return ;
}

convex hull trick CF344.E的更多相关文章

  1. 凸包(Convex Hull)构造算法——Graham扫描法

    凸包(Convex Hull) 在图形学中,凸包是一个非常重要的概念.简明的说,在平面中给出N个点,找出一个由其中某些点作为顶点组成的凸多边形,恰好能围住所有的N个点. 这十分像是在一块木板上钉了N个 ...

  2. Convex Hull 实现理论+自制Python代码

    Convex Hull 概述 计算n维欧式空间散点集的凸包,有很多的方法.但是如果要实现快速运算则其难点在于:如何快速判断散点集的成员是否是在凸集的内部.如果可以简化判断的运算过程,则可以极大简化迭代 ...

  3. OpenCV入门之寻找图像的凸包(convex hull)

    介绍   凸包(Convex Hull)是一个计算几何(图形学)中的概念,它的严格的数学定义为:在一个向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包.   在图像处理过程中,我们 ...

  4. 2D Convex Hulls and Extreme Points( Convex Hull Algorithms) CGAL 4.13 -User Manual

    1 Introduction A subset S⊆R2 is convex if for any two points p and q in the set the line segment wit ...

  5. Monotone Chain Convex Hull(单调链凸包)

    Monotone Chain Convex Hull(单调链凸包)算法伪代码: //输入:一个在平面上的点集P //点集 P 按 先x后y 的递增排序 //m 表示共a[i=0...m]个点,ans为 ...

  6. convex hull

    1 什么是convex hull 就是凸包,是计算几何中的一个概念,计算几何是计算机图形学的基础之一. 对于二维平面来说是这样的:对于二维平面上的点集,凸包是位于最外层的点构成的包围其它所有的点的凸多 ...

  7. opencv::凸包-Convex Hull

    概念介绍 什么是凸包(Convex Hull),在一个多变形边缘或者内部任意两个点的连线都包含在多边形边界或者内部. 正式定义:包含点集合S中所有点的最小凸多边形称为凸包 Graham扫描算法 首先选 ...

  8. Convex Hull | Set 1

    Given a set of points in the plane. the convex hull of the set is the smallest convex polygon that c ...

  9. 2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-I.html 题目传送门 - 2018牛客多校赛第三场 I ...

随机推荐

  1. 微信小程序 - 多地点标识(map)

    演示如下: wxml <map id="map" scale="{{scale}}" controls="{{controls}}" ...

  2. ipv6 dns list

    ip v6 DNS list: 将首选DNS服务器地址填上2001:778::37 备用DNS服务器地址填上2001:df8:0:7::1

  3. flask 框架 前端和后端请求超时问题

    部署模式 flask + Gunicorn + nginx 为什么要用Gunicorn + nginx ? 请看知乎大神们的回答:https://www.zhihu.com/question/3852 ...

  4. Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特

    代码地址如下:http://www.demodashi.com/demo/13257.html 1. 需求说明 本项目基于Python爬虫,爬取豆瓣电影上关于复仇者联盟3的所有影评,并保存至本地文件. ...

  5. iOS Core ML与Vision初识

    代码地址如下:http://www.demodashi.com/demo/11715.html 教之道 贵以专 昔孟母 择邻处 子不学 断机杼 随着苹果新品iPhone x的发布,正式版iOS 11也 ...

  6. SSH——增删改的实现二

    二.批量删除 逻辑删除取派员,将取派员的deltag改为“1” 1. 为“作废”按钮绑定事件 //批量删除取派员 function doDelete(){ //获得选中的行 var rows = $( ...

  7. js遮罩层弹出显示效果组件化

    1.在web开发中经常遇到遮罩层的效果,可以将这种常用方法通用化 function showid(idname){ var isIE = (document.all) ? true : false; ...

  8. [Android Bug] ListView中Header, Footer无法隐藏(gone)的问题

    ListView中Header.Footer View应该是会应该遇到, 比如说,滚动到底部时,自动开始加载: 对于一些应用市场,会在Header中加上ViewFlipper做应用推荐(滚动的那种,好 ...

  9. ansible远程切换用户执行命令

    ansible test -l 10.0.10.1 -e "ansible_become_user=www" -m shell -a "/data/publish/pub ...

  10. centos7下安装openvpn,访问内网服务器 (二) windows访问

    一.简介 在上一章中已经安装好了openvpn,并且已经启动成功,现在就可以通过openvpn的客户端进行连接访问内网服务器了. 二.安装openvpn客户端 下载地址: https://www.te ...