洛谷T51924 忘情
二分上界有多大开多大 二分上界有多大开多大 二分上界有多大开多大 重要的事情说三遍
又被bright神仙带着做题了
先无脑上wqs二分
我们可以把这个柿子画一下,区间的花费就变成((sigema(l~r)i s[i])+1)^2了
那么这个东西经过我艰苦的画柿子证明是满足四边形不等式的
然后就和贞鱼那题一样搞了?然后我就被卡常了qwq囧
其实是自己思维僵化得厉害
上个斜率优化不好吗2333333
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL; int n;LL s[],f[],g[];
int h,t,q[];
LL Y(int j){return f[j]+s[j]*s[j]-*s[j];}
LL X(int j){return s[j];}
void check(LL C)
{
h=,t=;q[++t]=;f[]=g[]=;
for(int i=;i<=n;i++)
{
while(h<t&&(Y(q[h+])-Y(q[h]))<=(X(q[h+])-X(q[h]))**s[i])h++;
f[i]=f[q[h]]+(s[i]-s[q[h]]+)*(s[i]-s[q[h]]+)+C;
g[i]=g[q[h]]+;
while(h<t&& (Y(q[t])-Y(q[t-]))*(X(i)-X(q[t])) >= (Y(i)-Y(q[t]))*(X(q[t])-X(q[t-])) )t--;
q[++t]=i;
}
}
int main()
{
int K;
scanf("%d%d",&n,&K);s[]=;
for(int i=;i<=n;i++)
scanf("%lld",&s[i]), s[i]+=s[i-]; LL l=,r=1e18,ans;
while(l<=r)
{
LL mid=(l+r)/;
check(mid);
if(g[n]>=K)
{
ans=f[n]-K*mid;
l=mid+;
}
else r=mid-;
}
printf("%lld\n",ans);
return ;
}
斜率优化
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL; int n;
LL s[],f[],g[];
LL val(int l,int r){return (s[r]-s[l]+)*(s[r]-s[l]+);}
LL cost(int j,int i){return f[j]+val(j,i);}//由j这个决策点更新i的花费
struct node
{
int l,r,id;
node(){}
node(int L,int R,int ID){l=L;r=R;id=ID;}
}q[];
void check(LL C)
{
int h=,t=;q[++t]=node(,n,);
for(int i=;i<=n;i++)
{
if(q[h].r<i)h++;
q[h].l=i;
f[i]=cost(q[h].id,i)+C;
g[i]=g[q[h].id]+; if(h>t||cost(i,n)<=cost(q[h].id,n))
{
while(h<=t&&cost(i,q[t].l)<=cost(q[t].id,q[t].l))t--;
if(h>t)q[++t]=node(i,n,i);
else
{
int l=q[t].l,r=q[t].r,ans;
while(l<=r)
{
int mid=(l+r)/;
if(cost(i,mid)>cost(q[t].id,mid))
{
ans=mid;
l=mid+;
}
else r=mid-;
}
q[t].r=ans;
q[++t]=node(ans+,n,i);
}
}
}
}
int main()
{
int K;
scanf("%d%d",&n,&K);s[]=;
for(int i=;i<=n;i++)
scanf("%lld",&s[i]), s[i]+=s[i-]; LL l=,r=1e18,ans;
while(l<=r)
{
LL mid=(l+r)/;
check(mid);
if(g[n]>=K)
{
ans=f[n]-K*mid;
l=mid+;
}
else r=mid-;
}
printf("%lld\n",ans);
return ;
}
四边形不等式优化
洛谷T51924 忘情的更多相关文章
- 洛谷P4983 忘情 (WQS二分+斜率优化)
题目链接 忘情水二分模板题,最优解对划分段数的导数满足单调性(原函数凸性)即可使用此方法. 详细题解洛谷里面就有,不啰嗦了. 二分的临界点让人有点头大... #include<bits/stdc ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- 洛谷P1538迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
- 洛谷八月月赛Round1凄惨记
个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...
随机推荐
- Layui框架 中table解决日期格式问题
使用templet自定义模板(详细查看官方文https://www.layui.com) 1.对Date的扩展,将 Date 转化为指定格式的String ,创建一个js文件: (dataForma ...
- IDEA打war包部署本地TOMCAT测试
在Eclipse中打war包很方便,导出即可直接选择war包,如下图所示: 但是在IDEA中有点麻烦,网上很多教程,做的也都很好,我自己也做一份,加深一下印象. 首先打开File->Projec ...
- Insert 语句对 nologging 与 logging表 在不同场景下的优化
前言 前段时间报表数据库上有条insert sql语句,插入的大量数据,执行非常慢,需要对其进行分析优化. 分析步骤是在:ARCHIVE与NOARCHIVE模式下进行. 测试场景: 分别对表的常规插入 ...
- PHP程序员必须知道的两种日志
前言 作为一名程序员,比码代码还重要那么一点点的东西就是日志的分析和查询.下面列出常见日志及设置方法. php-fpm 慢日志 php慢日志需要在php-fpm.conf设置,如果使用源码包安装默认请 ...
- Python基础—线程、进程和协程
今天已是学习Python的第十一天,来干一碗鸡汤继续今天的内容,今天的鸡汤是:超越别人对你的期望.本篇博客主要介绍以下几点内容: 线程的基本使用: 线程的锁机制: 生产者消费之模型(队列): 如何自定 ...
- layer弹层content写错导致div复制了一次,导致id失效 $().val() 获取不到dispaly:none div里表单的值
错误之源: $("a.consult").click(function () { lib_consult_html = $('#consult-html').h ...
- JAVA IO中read()方法的返回值
read()方法的作用是从输入流读取数据的下一个字节,返回的字节的值是一个0~255之间的整数.到达流的末尾返回-1. 刚开始我以为这个返回值表示的是所读取的数据的长度,可是之后在一个示例程序中发现这 ...
- 【转】 Java中的IO整理
写在前面:本文章基本覆盖了java IO的全部内容,java新IO没有涉及,因为我想和这个分开,以突出那个的重要性,新IO哪一篇文章还没有开始写,估计很快就能和大家见面.照旧,文章依旧以例子为主,因为 ...
- codeforces 361B
#include<stdio.h> int a[100100]; int main() { int n,i,k; while(scanf("%d%d",&n,& ...
- msp430入门编程02
msp430单片机最小系统 msp430入门学习 msp430入门编程