第一道决策单调性……

题目描述

HHHOJ#261. Brew


题目分析

挺好的……模板题?

寄存了先。

 #include<bits/stdc++.h>
typedef long long ll;
const int maxn = ; struct node
{
int x,l,r;
node(int a=, int b=, int c=):x(a),l(b),r(c) {}
};
int n,k,a[maxn],g[maxn];
ll s[maxn],mid,pos,ans,f[maxn];
std::deque<node> q; int read()
{
char ch = getchar();
int num = ;
bool fl = ;
for (; !isdigit(ch); ch=getchar())
if (ch=='-') fl = ;
for (; isdigit(ch); ch=getchar())
num = (num<<)+(num<<)+ch-;
if (fl) num = -num;
return num;
}
void clears(std::deque<node> &q)
{
std::deque<node> emt;
std::swap(q, emt);
}
ll val(int l, int r)
{
if (l >= r) return ;
int mid = (l+r)>>;
return 1ll*(mid-l+)*a[mid]-(s[mid]-s[l-])+(s[r]-s[mid-])-1ll*(r-mid+)*a[mid];
}
ll calc(int l, int r)
{
return f[l]+val(l+, r);
}
bool check(ll w)
{
clears(q), q.push_front(node(, , n));
for (int i=; i<=n; i++)
{
// printf("w:%lld i:%d\n",w,i);
node tt = q.front();
g[i] = g[tt.x]+, f[i] = calc(tt.x, i)+w;
int upd = -;
while (q.size())
{
node tt = q.back();
if (calc(tt.x, tt.l) > calc(i, tt.l))
upd = tt.l, q.pop_back();
else{
int lbd = tt.l, rbd = tt.r, fnd = -;
while (lbd <= rbd)
{
int mid = (lbd+rbd)>>;
if (calc(tt.x, mid) > calc(i, mid))
fnd = mid, rbd = mid-;
else lbd = mid+;
}
if (fnd!=-) upd = fnd, q.back().r = fnd-;
break;
}
}
if (upd!=-) q.push_back(node(i, upd, n));
if (q.size()){
q.front().l++;
if (q.front().l > q.front().r) q.pop_front();
}
}
return g[n] <= k;
}
int main()
{
n = read(), k = read();
if (k >= n) puts("");
else{
for (int i=; i<=n; i++) a[i] = read();
std::sort(a+, a+n+);
for (int i=; i<=n; i++) s[i] = s[i-]+a[i];
ll l = , r = 1e12;
for (; l<=r; )
{
mid = (l+r)>>;
if (check(mid))
ans = f[n]-mid*k, r = mid-;
else l = mid+;
}
printf("%lld\n",ans);
}
return ;
}

END

【wqs二分 决策单调性】HHHOJ#261. Brew的更多相关文章

  1. 【wqs二分 || 决策单调性】cf321E. Ciel and Gondolas

    把状态看成层,每层决策单调性处理 题目描述 题目大意 众所周知,贞鱼是一种高智商水生动物.不过他们到了陆地上智商会减半.这不?他们遇到了大麻烦!n只贞鱼到陆地上乘车,现在有k辆汽车可以租用.由于贞鱼们 ...

  2. BZOJ5311 贞鱼(动态规划+wqs二分+决策单调性)

    大胆猜想答案随k变化是凸函数,且有决策单调性即可.去粘了份fread快读板子才过. #include<iostream> #include<cstdio> #include&l ...

  3. P3515-[POI2011]Lightning Conductor【整体二分,决策单调性】

    正题 题目链接:https://www.luogu.com.cn/problem/P3507 题目大意 \(n\)个数字的一个序列\(a\),对于每个位置\(i\)求一个\(p_i\)使得对于任意\( ...

  4. CF321E Ciel and Gondolas Wqs二分 四边形不等式优化dp 决策单调性

    LINK:CF321E Ciel and Gondolas 很少遇到这么有意思的题目了.虽然很套路.. 容易想到dp \(f_{i,j}\)表示前i段分了j段的最小值 转移需要维护一个\(cost(i ...

  5. 决策单调性&wqs二分

    其实是一个还算 trivial 的知识点吧--早在 2019 年我就接触过了,然鹅当时由于没认真学并没有把自己学懂,故今复学之( 1. 决策单调性 引入:在求解 DP 问题的过程中我们常常遇到这样的问 ...

  6. DP的各种优化(动态规划,决策单调性,斜率优化,带权二分,单调栈,单调队列)

    前缀和优化 当DP过程中需要反复从一个求和式转移的话,可以先把它预处理一下.运算一般都要满足可减性. 比较naive就不展开了. 题目 [Todo]洛谷P2513 [HAOI2009]逆序对数列 [D ...

  7. Gym - 101981B Tournament (WQS二分+单调性优化dp)

    题意:x轴上有n个人,让你放置m个集合点,使得每个人往离他最近的集合点走,所有人走的距离和最短. 把距离视为花费,设$dp[i][k]$表示前i个人分成k段的最小花费,则有递推式$dp[i][k]=m ...

  8. bzoj 2216 [Poi2011]Lightning Conductor——单调队列+二分处理决策单调性

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2216 那个关于位置的代价是带根号的,所以随着距离的增加而增长变慢:所以靠后的位置一旦比靠前的 ...

  9. bzoj 4709 [Jsoi2011]柠檬——单调栈二分处理决策单调性

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4709 题解:https://blog.csdn.net/neither_nor/articl ...

随机推荐

  1. 微信分账功能与微信支付企业付款相关内容详解(payjs版)

    PAYJS开通微信分账功能以来,有很多同学咨询相关情况.很多同学关心有没有什么办法,可以让自己的商户号快速开通企业付款功能.这里就介绍下微信分账的具体相关内容,可以完美解决问题. 一.什么是微信分账? ...

  2. Elasticsearch内存分配设置详解(转)

    Elasticsearch默认安装后设置的内存是1GB,对于任何一个现实业务来说,这个设置都太小了.如果你正在使用这个默认堆内存配置,你的集群配置可能会很快发生问题.这里有两种方式修改Elastics ...

  3. React中方法的this绑定

    第一种 在组件(类)的constructor中绑定this class Demo extends Component { constructor(this) { super(this) this.st ...

  4. vue教程2-组件化开发

    全局组件 <div id="app"> <cs1></cs1> </div> <script> Vue.componen ...

  5. js 去除字符串空白符

    var a="      123456" varb=a.replace(/(^\s*)/g, "");

  6. mac下配置php+mysql+nginx遇到的问题

    1.mysql:没有useradd和groupadd命令,好在原来的/etc/passwd有了mysql,www用户,/etc/group下也有了mysql,www用户组 2.nginx:编译ngin ...

  7. mysql 存储过程变量及循环的使用

    1.用游标循环 BEGIN -- 定义变量 -- 定义done DECLARE done INT; -- 定义 ammeter_id_bl DECLARE ammeter_id_bl DOUBLE; ...

  8. return void ajax

    public class UserInfo { private String name; private Integer age; public String getName() { return n ...

  9. java引用数据类型(类)

    1 引用数据类型分类 类的类型分两种 1)Java提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供开发者使用.(类的变量是属性) 2)开发者自己创建的类, ...

  10. CF1157D N Problems During K Days

    思路: 在1, 2, 3, ... , k的基础上贪心构造. 实现: #include <bits/stdc++.h> using namespace std; typedef long ...