首页 > 其他分享 >[Hackerrank University Codesprint 5] Sword profit (李超线段树)

[Hackerrank University Codesprint 5] Sword profit (李超线段树)

时间:2024-07-03 09:54:08浏览次数:16  
标签:Hackerrank profit max University i64 cdot 线段 mod

[Hackerrank University Codesprint 5] Sword profit

李超线段树

考虑大力推式子。写出在第 \(i\) 所商店的第 \(k\) 把剑在第 \(j\) 所商店卖掉的价格。

\[\text{profit}=\max(0,q_i-(j-i)\cdot d_i-r_j)-(a_i+k\cdot b_i) \]

显然利益一定要是正的才有价值,所以 \(\max\) 可以改到:

\[\text{profit}=\max(0,q_i-(j-i)\cdot d_i-r_j-(a_i+k\cdot b_i)) \]

小于 \(0\) 可以特判掉,先去掉 \(\max\),然后整理一下式子。

\[\text{profit}=q_i+i\cdot d_i-a_i-k\cdot b_i-(j\cdot b_i+r_i) \]

前面的部分是这把剑的固有贡献,我们只需要将后面的部分最小化。容易看出后面的部分是一条 \(k=j\),\(b=r_i\) 的线段,定义域为 \([1,\max(b_i)]\)。而我们要求的就是 \(x=b_i\) 时所有线段的最小值。这是一个经典问题,可以用李超线段树解决。

关于 \(k\),就是能获得利益的最多的剑数。

从大到小枚举商店,每次先加入线段,再查询即可。

复杂度 \(O(n\log^2n)\)。

#include <bits/stdc++.h> 
#define pii std::pair<int, int>
#define mk std::make_pair
#define fi first
#define se second
#define pb push_back

using i64 = long long;
using ull = unsigned long long;
const i64 iinf = 0x3f3f3f3f, linf = 0x3f3f3f3f3f3f3f3f;
const i64 N = 3e5 + 10, mod = 1e9 + 7, inv = (mod + 1) / 2;
i64 n, ans, m, cnt;
i64 q[N], a[N], b[N], r[N], d[N];
struct line {
	i64 k, b;
} f[N];
int t[N << 2];
i64 calc(int id, i64 x) {
	if(!id) return linf;
	return 1LL * f[id].k * x + f[id].b;
}
void mdf(int u, int l, int r, int x) {
	int mid = (l + r) >> 1;
	bool bmid = (calc(x, mid) <= calc(t[u], mid));
	if(bmid) std::swap(t[u], x);
	bool bl = (calc(x, l) < calc(t[u], l)), br = (calc(x, r) < calc(t[u], r));
	if(bl) mdf(u << 1, l, mid, x);
	if(br) mdf(u << 1 | 1, mid + 1, r, x);
}
void upd(int u, int l, int r, int L, int R, int x) {
	if(L <= l && r <= R) {
		mdf(u, l, r, x);
		return;
	}
	int mid = (l + r) >> 1;
	if(L <= mid) upd(u << 1, l, mid, L, R, x);
	if(R > mid) upd(u << 1 | 1, mid + 1, r, L, R, x);
}
int mn(int x, int y, int z) {
	bool ret = (calc(x, z) <= calc(y, z));
	if(ret) return x;
	return y;
}
int qry(int u, int l, int r, int x) {
	if(l == r) return t[u];
	int mid = (l + r) >> 1;
	if(x <= mid) return mn(t[u], qry(u << 1, l, mid, x), x);
	else return mn(t[u], qry(u << 1 | 1, mid + 1, r, x), x);
}
int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
	std::cin >> n;
	for(int i = 1; i <= n; i++) {
		std::cin >> q[i] >> a[i] >> b[i] >> r[i] >> d[i];
		m = std::max(m, d[i]);
	}

	for(i64 i = n; i >= 1; i--) {
		f[++cnt].k = i, f[cnt].b = r[i];
		upd(1, 1, m, 1, m, cnt);
		i64 p = qry(1, 1, m, d[i]);
		if(p) {
			i64 tot = q[i] + i * d[i] - a[i] - calc(p, d[i]), k = std::max(0LL, tot / b[i]) % mod; //特判
			if(k) ans = (ans + tot % mod * k % mod - 1LL * (1 + k) % mod * k % mod * inv % mod * b[i] % mod + mod) % mod;
		}
	}
	std::cout << ans << "\n";

	return 0;
}

标签:Hackerrank,profit,max,University,i64,cdot,线段,mod
From: https://www.cnblogs.com/FireRaku/p/18281026

相关文章

  • 王立志等(Iowa State University):一种用于作物产量预测的 CNN-RNN 框架
    这是美国爱荷华州立大学工业工程系王立志老师联合同校老师发表的一篇文章。Front.PlantSci.虽然影响因子不高(大家应该都知道偏应用的数量遗传学发表的期刊普遍不高),但本文的引用还是蛮高的,好像是年度最佳论文之一吧。本文介绍了一种基于深度学习的框架,用于预测作物产量。该框架......
  • The 18-th Beihang University Collegiate Programming Contest (BCPC 2023) - Final
    https://codeforces.com/gym/104883A#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;usingvi=vector<int>;i32main(){ios::sync_with_stdio(false),cin.tie(nullptr);i64n,sum=0;c......
  • 2024-03-30:用go语言,集团里有 n 名员工,他们可以完成各种各样的工作创造利润, 第 i 种工
    2024-03-30:用go语言,集团里有n名员工,他们可以完成各种各样的工作创造利润,第i种工作会产生profit[i]的利润,它要求group[i]名成员共同参与,如果成员参与了其中一项工作,就不能参与另一项工作,工作的任何至少产生minProfit利润的子集称为盈利计划,并且工作的成员总数最多为......
  • CF1717E Madoka and The Best University
    CF1717EMadokaandTheBestUniversity简化题意求\(\sum\operatorname{lcm}(c,\gcd(a,b))\thinspace(a+b+c=n\thinspace,a,b,c\inZ^+)\)。做法由于我们只要知道其中两个数的值就能确定第三个数,所以只需要枚举两个数即可,这里考虑枚举\(c\)和\(a\)。设答案......
  • CF1916E Happy Life in University
    关于我赛时线段树忘了开四倍空间导致白吃了一发罚时这档逝原题传送门约定\(x\)子树内的叶子称为\(x\)的叶子。与\(x\)颜色相同的点称为\(x\)的同色点或\(x\)色点。所有在\(x\)子树内的、到\(x\)的路径上(两端不含)没有\(x\)的同色点的\(x\)的同色点称为\(x\)......
  • academy和college "University"
    一文告诉你academy和college区别FFF看世界2024-01-2221:41上海哈利波特中的学院就是Academy"Academy"和"College"在一些语境中可能有交叉使用,但它们通常表示不同类型的教育机构。这里是它们的一般区别:Academy(学院):"Academy"一词通常指的是一所高中或中......
  • 虹科分享 | 实现网络流量的全面访问和可视性——Profitap和Ntop联合解决方案
    这次和大家分享如何捕捉、分析和解读网络数据,从而更有效地监控网络流量,实现网络性能的最大化。先来看一个实际的问题——“网速太慢”。一、为什么客户抱怨“网速太慢”?1、互联网服务提供商面临着客户增长带来的高带宽使用率问题,面临的挑战是如何确保带宽得到有效利用。很多时候,......
  • 浙江科技大学(Zhejiang University of Science and Technology)
    浙江科技大学(ZhejiangUniversityofScienceandTechnology)为浙江省属全日制本科高校,是一所具有硕士、学士学位授予权和外国留学生、港澳台学生招生权的特色鲜明的应用型省属本科高校,主校区位于杭州西湖区小和山高教园区,分校区位于安吉教科文新区,是教育部首批“卓越工程师教育培......
  • 信阳 信阳农林学院 Xinyang Agriculture and Forestry University 简 称信阳农林
    信阳农林学院外文名XinyangAgricultureandForestryUniversity简    称信阳农林·XinyangA&FUniversity(XYAFU) 历史沿革1910年(清宣统二年)学校在私立淮西中等学堂旧址(今汝南县城关)创建,校名为汝宁府中等实业学堂。1911年改称汝宁府官立甲种农业学校。1......
  • 洛阳师范学院Luoyang normal university
    洛阳师范学院是一所省属普通高等本科院校,位于千年帝都、牡丹花城、丝路起点——洛阳。学校地处伊水之滨,万安山下,东汉太学便发端于此。南望二程故里,传颂着程门立雪、鲁台望道的佳话;西望关林和世界文化遗产龙门石窟,绽放着世界文化遗产的璀璨光芒。学校前身是始建于1916年的河南省立......