严格 wqs 二分——2025.6.5 鲜花

严格 wqs 二分——2025.6.5 鲜花

妄想感傷代償連盟
言っちゃった
	
我说了
もう一时だけ隣りに居たい
	
只想暂时待在你的身边
いやいやまさか 延长は郁雑い
	
不对不对 难道说 继续下去只会令人厌烦
御免なさい 帰ってね
	
非常抱歉 还是回去吧
二酸化の炭素 きみの浓度
	
二氧化碳 是你的浓度
浸ってたいよ 泥沼の梦に
	
沉浸在泥沼般的梦里
身胜手だって言われてもペロリ
	
就算被说任性也只是吐吐舌头
不安じゃない 未来はない
	
没有不安 没有未来
その颜に生まれ変わりたいな
	
真想脱胎换骨成此面目啊
知っちゃった
	
早知道了
大嫌いを裏返したとて
	
就算把讨厌翻个面过来
そこに大好きは隠れてないと
	
那里也不会藏着喜欢
叶えたい この想い
	
想要实现这种愿望
甘え过ぎ太る心回り
	
过度甜蜜增加心情波动
“ファット想い→スリム”を掲げよう
	
主张削减日益膨胀的思念
出逢った顷と同じ様に成ろう
	
变回与相遇时同种的模样
思い笑描く理想狂
	
笑着描绘回忆的理想狂
血走る愿いはやがて安堵
	
激越之愿也终归平息
だけど「大丈夫」
	
可是令人完全安心的
なんて恋はどこにもないの
	
恋情已经毫无影踪了
だから妄想感伤代偿连盟
	
所以妄想感伤代价联盟
爱を懐いて理想を号んだ
	
心执爱情高呼理想
行き场のない愚者のメロディー
	
无处可去愚者旋律
再挑戦・転生・テレポーテーション
	
再挑战 转生 瞬间移动
何回だって 重ねて逝くんだ
	
即便多少次 都会再度逝去
终わりなき爱の随に さあ
	
跟随着没有终点的爱 来吧
爱や厌 爱や厌 なななな
	
爱还是厌 爱还是厌
爱や厌 爱や厌 ななななな
	
爱还是厌 爱还是厌
爱や厌 爱や厌 なななな
	
爱还是厌 爱还是厌
爱や厌 爱や厌 ななななな
	
爱还是厌 爱还是厌
顽张った
	
努力过了
どうしようもないその我尽
	
无可救药的那份任性
叶えた先にある谜自恋魔
	
如愿以偿后成了自恋狂魔
怒ってる?怒ってない
	
你生气了 我没生气
阿吽の呼吸でズレるビート
	
心有灵犀一般 呼吸偏离了节奏
これがもし映画やドラマなら
	
如果这是电影或者连续剧的话
スタッフロールまでは乗り切れど
	
我就要直接跳到演职员表了
二度とは観たくない
	
再也不想看第二次
酷すぎる起承 転も结も
	
太残酷了这起承和转结
だけど「大丈夫」
	
可我还是相信着
なんて恋を信じて仕舞うよ
	
能令人放心的恋情
通称:爱情対象年齢
	
通称 爱情 对象 年龄
爱を悪んで守った位相が
	
憎恶爱情守护地位
正しく歪み始めるの
	
这正是扭曲的开始
最低じゃん
	
最差劲了不是吗
どうせ対人ローション
	
反正是自我伪装见机行事
何回だって 伤付け合うんだ
	
即便多少次给予彼此伤害
混ざり合う爱のフィロソフィー
	
也是混杂在爱中的哲理
だけど「大丈夫」なんて嘘を覚えて仕舞うの
	
可是我发现了“不用担心”什么的都是谎言啊
だから
	
所以啊
だから妄想感伤代偿连盟
	
所以妄想感伤代价联盟
爱を懐いて理想を号んだ
	
心执爱情高呼理想
行き场のない愚者のメロディー
	
无处可去愚者旋律
再挑戦・転生・テレポーテーション
	
再挑战 转生 瞬间移动
何回だって 重ねて逝くんだ
	
即便多少次 都会再度逝去
终わりなき爱の随に さあ
	
跟随着没有终点的爱 来吧
通称:爱情対象年齢
	
通称 爱情 对象 年龄
爱を悪んで守った位相が
	
憎恶爱情守护地位
正しく歪み始めるの
	
这正是扭曲的开始
最低じゃん
	
最差劲了不是吗
どうせ対人ローション
	
反正是自我伪装见机行事
何回だって 伤付け合うんだ
	
即便多少次给予彼此伤害
混ざり合う爱のフィロソフィー
	
也是混杂在爱中的哲理
爱や厌 爱や厌 なななな
	
爱还是厌 爱还是厌
爱や厌 爱や厌 ななななな
	
爱还是厌 爱还是厌
爱や厌 爱や厌 なななな
	
爱还是厌 爱还是厌
爱や厌 爱や厌 ななななな
	
爱还是厌 爱还是厌
爱や厌 爱や厌 なななな
	
爱还是厌 爱还是厌
爱や厌 爱や厌 ななななな
	
爱还是厌 爱还是厌
爱や厌 爱や厌 なななな
	
爱还是厌 爱还是厌
爱や厌 爱や厌 ななななな
	
爱还是厌 爱还是厌

先简单说一下传统的 wqs 二分,不感兴趣可以直接跳过,对后面没影响。

考虑一个上凸的函数 \(f(x)\),我们希望求得其在 \(k\) 处的取值 \(f(k)\)

考虑每次用一条直线 \(y = kx + b\) 去切这个凸壳,设交点是 \((x, f(x))\),则有 \(f(x) = kx + b \Rightarrow b = f(x) - kx\),若能求 \(f(x) - kx\) 的最大值,则能推出 \(b\),进而求出交点,并一次调整斜率,使其正好切到 \(k\)。整个过程用二分实现。

但是这个做法会有很多的细节,并不好写,并且不能高维化。

于是我们学习一下严格 wqs 二分。

\(g(x) = \max\limits_{a} \{f(a) + ax\} - kx\),其中 \(k\) 是我们要求的 \(f(k)\) 中的 \(k\),则 \(g(x)\) 是下凸的(注意和 \(f\) 是相反的)且最小值取到 \(f(k)\)

严格证明可以看 jijidawang 的 拉格朗日对偶的相关理论,这里简单说一下。

考虑求 \(x = k\)\(x - k = 0\)\(\max f(x)\),有:

\[\begin{aligned}\max f(x) &= \max \{f(x) + \min_\lambda \{\lambda (x - k)\}\} \\ &= \max \min_\lambda \{f(x) + \lambda x - \lambda k\} \\ &= \min_\lambda \max \{f(x) + \lambda x - \lambda k\} \\ &= \min_\lambda \{\max \{f(x) + \lambda x\} - \lambda k\} \\ \end{aligned}\]

其中第三步用了 Minimax 定理,具体内容可以自行搜索。我不太会证

于是问题变成求单峰函数极值,这个二分和上面的斜率其实是对应的,也就是说可以用整数二分的技巧。

容易将其推广到高维。

给出一个高维板子 CF1799F Halve or Subtract

Code
/*
clear && g++ % -o %< -O2 -std=c++14 -Wall -Wextra -DLOCAL && time ./%< && size %<
clear && g++ % -o %< -O2 -std=c++14 -fsanitize=address,undefined -g -Wall -Wextra -DLOCAL && time ./%< && size %<
echo && cat in_out/out.out && echo
*/
#include <bits/stdc++.h>
using namespace std;
using llt = long long;
using llf = long double;
using ull = unsigned long long;
#define endl '\n'
#ifdef LOCAL
FILE *InFile = freopen("in_out/in.in", "r", stdin), *OutFile = freopen("in_out/out.out", "w", stdout);
#endif

const int N = 5003;
int n, _b, _k1, _k2, _a[N];

llt Clc(int x, int y){
	llt r = 0;
	for(int i = 1; i <= n; ++i)
		r += min({_a[i], ((_a[i] + 1) >> 1) + x, max(_a[i] - _b, 0) + y, max(((_a[i] + 1) >> 1) - _b, 0) + x + y});
	return r;
}
llt Wqs(auto &&f, int k){
	auto g = [&](int x){ return f(x) - 1ll * k * x; };
	int l = -1e9, r = 1e9;
	while(l <= r){
		int mid = (l + r) >> 1; llt a = g(mid), b = g(mid + 1);
		if(a == b) return a;
		else if(a < b) l = mid + 1;
		else r = mid - 1;
	}
	return g(l);
}

int main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t; cin >> t;
	while(t--){
		cin >> n >> _b >> _k1 >> _k2;
		for(int i = 1; i <= n; ++i) cin >> _a[i];
		cout << Wqs([&](int x){return Wqs([&](int y){ return Clc(y, x); }, _k1); }, _k2) << endl;
	}
}
P




posted @ 2025-06-05 22:08  xrlong  阅读(50)  评论(1)    收藏  举报

Loading