当前位置: 首页 > news >正文

P15546 学习笔记

赛时被卡溢出了呜呜呜。

推式子

这个推式子推了我半小时,感觉推复杂了,不过也在赛后补题的时候过了。

什么文字的太多了,直接看形式化题意,让我们求

\[\sum_{1 \le l<r \le n} \sum_{l \le i<j \le r} [(j-1)k+a_j'-(i-1)k+a_i'] \]

的最大值。

我们定义第 \(x\) 列的行号

\[f(x)=(x-1)k+a_x' \]

则原式变为

\[\sum_{1 \le l<r \le n} \sum_{1 \le i<j \le r} [f(j)-f(i)]。 \]

我们令原式为 \(F\)

\[f(j)-f(i)=(j-i)k+(a_j'-a_i') \]

\[\begin{align*} F&=\sum_{1 \le l<r \le n} \sum_{l \le i<j \le r} [f(j)-f(i)]\\ &=\sum_{1 \le l<r \le n} \sum_{l \le i<j \le r} [(j-i)k+(a_j'-a_i')]\\ &=k\sum_{1 \le l<r \le n} \sum_{l \le i<j \le r}(j-i)+\sum_{1 \le l<r \le n} \sum_{l \le i<j \le r}(a_j'-a_i')\\ \end{align*} \]

方便计算,记

\[S=\sum_{1 \le l<r \le n} \sum_{l \le i<j \le r} (j-i) \]

\[T=\sum_{1 \le l<r \le n} \sum_{l \le i<j \le r} (a_j'-a_i') \]

\[F=k \cdot S+T。 \]

下面分别计算 \(S\)\(T\)

化简 \(S\)

注意到 \(S\) 为恒定常数。

对于固定的 \(i<j\),其在区间 \([l,r]\) 中出现当且仅当 \(l \le i\)\(j \le r\),共有

\[i \cdot (n-j+1) \]

个区间,则

\[S=\sum_{1 \le i<j \le n} i(j-i)(n-j+1)。 \]

\(d=j-i\),则 \(j=d+i\),从而

\[S=\sum_{d=1}^{n-1}\sum_{i=1}^{n-d} id(n-i-d+1)。 \]

\(d\) 从第二个 \(\sum\) 中提出来:

\[S=\sum_{d=1}^{n-1} d \cdot \sum_{i=1}^{n-d}i(n-i-d+1)。 \]

\(m=n-d\),则第二个 \(\sum\)

\[\sum_{i=1}^m i(m-i+1)=\frac16 m(m+1)(m+2) \]

于是

\[S=\frac16\sum_{d=1}^{n-1}d(n-d)(n-d+1)(n-d+2)。 \]

化简 \(T\)

同上一部分,可交换求和顺序并化简

\[T=\sum_{1 \le i<j \le n} i(a_j'-a_i')(n-j+1)。 \]

拆开

\[T=\sum_{1 \le i<j \le n} i(n-j+1) \cdot a_j'-\sum_{1 \le i<j \le n} i(n-j+1) \cdot a_i'。 \]

对于第一个 \(\sum\),固定 \(j\) 对于 \(i<j\) 求和

\[\sum_{i=1}^{j-1} i(n-j+1) \cdot a_j'=\frac12 j \cdot a_j'(j-1)(n-j+1)。 \]

对于第二个 \(\sum\),固定 \(i\) 对于 \(j>i\) 求和

\[\begin{align*} \sum_{j=i+1}^n i(n-j+1) \cdot a_i'&=i \cdot a_i'\sum_{j=i+1}^n (n-j+1)\\ &=\frac12 i \cdot a_i'(n-i)(n-i+1)。 \end{align*} \]

于是

\[\begin{align*} T&= \sum_{i=1}^n a_i'[\frac12 i(i+1)(n-i+1)-\frac12 i(n-i)(n-i+1)]\\ &=\sum_{i=1}^n a_i'[\frac12i(n-i+1)(i+1-n+i)]\\ &=\frac12\sum_{i=1}^ni \cdot a_i'(n-i+1)(2i-n-1)。 \end{align*} \]

\[w_i=\frac12 i(n-i+1)(2i-n-1) \]

\[T=\sum_{i=1}^n a_i'w_i。 \]

最大化 \(T\)

已知 \(\{a_i'\}\)\(\{a_i\}\) 的一个重排,即每个数值 \(v\in[1,k]\)\(a'\) 中出现的次数等于它在 \(a\) 中出现的次数 \(c_v\)

由排序不等式:要使 \(\sum w_i a_i'\) 最大,应将 \(a_i'\) 按与 \(w_i\) 相同的顺序排列,即 \(w_i\) 越大,分配的 \(a_i'\) 也应越大。

因此我们按 \(w_i\) 降序排序索引,同时将可用的数值(从大到小,每个值 \(v\)\(c_v\) 份)依次赋给这些位置。

code
#include <bits/stdc++.h>
#define pub public:
#define pri private:
#define fri friend:
#define Ofile(s) freopen(s".in", "r", stdin), freopen (s".out", "w", stdout)
#define Cfile(s) fclose(stdin), fclose(stdout)
#define fast ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;using ll = long long;
using ull = unsigned long long;
using i128 = __int128;
using ui128 = unsigned __int128;
using lb = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pil = pair<int, ll>;
using pli = pair<ll, int>;constexpr int mod = 998244353;
constexpr int maxn = 1e5 + 5;
constexpr int maxk = 1e6 + 5;ll n, k, cur_val, r, out, total;
i128 S, T, tmp, ans;ll sum[maxk], idx[maxn];
i128 w[maxn];void print_unsigned(ui128 t){if (t >= 10)print_unsigned(t / 10);putchar('0' + t % 10);
}void print(i128 t){if (t < 0){putchar('-');ui128 tmpp = -(ui128)t;print_unsigned(tmpp);}else if (!t)putchar('0');else print_unsigned((ui128) t);
}int main() {freopen("contest.in", "r", stdin);freopen("contest.out", "w", stdout);cin >> n >> k;for (int i = 1, x; i <= n; i++)cin >> x, sum[x]++;for (ll d = 1; d <= n - 1; d++){tmp = (i128)d * (n - d) * (n - d + 1) * (n - d + 2) / 6;S += tmp;}S *= k;for (ll i = 1; i <= n; i++)w[i] = (i128)i * (n - i + 1) * (2 * i - n - 1) / 2;for (int i = 1; i <= n; i++) idx[i] = i;sort(idx + 1, idx + n + 1, [&](int x, int y) {return w[x] > w[y];});cur_val = k;while (cur_val >= 1 && sum[cur_val] == 0) cur_val--;r = sum[cur_val];for (ll i = 1; i <= n; i++){if (total >= n) break;ll pos = idx[i];T += w[pos] * cur_val;total++;r--;while (!r && cur_val > 1) cur_val--, r = sum[cur_val];}ans = S + T;print(ans);return 0;
}
http://www.jsqmd.com/news/425400/

相关文章:

  • 【二分】BISHI85 【模板】整数域二分
  • 《深度解析!Agentic AI在智能制造潜力,提示工程架构师视角揭秘》
  • AI原生应用开发:Llama模型的10个高级用法
  • SVG Stroke 属性详解
  • 数据仓库监控体系搭建:从ETL到查询全链路监控
  • SQL ROUND() 函数详解
  • 解读大数据领域结构化数据的管理模式
  • 华为OD机考双机位C卷 - Alice的安全旅行 (Java Python JS GO C++ C)
  • 基于双层优化与二阶锥松弛模型的电动汽车时空调度策略:在MATLAB环境中的配电网研究
  • 从MVP到规模化:AI原生应用的成长路径
  • 2026年最受欢迎的三亚海鲜餐厅TOP5推荐,带你畅享鲜美海味盛宴
  • Aspose.Total for .NET 2026全系列来了,官方包
  • day100(3.1)——leetcode面试经典150
  • 2026年三亚湘菜餐厅对比推荐,必尝五大经典美味,让你领略湘味魅力
  • AI赋能,AI应用架构师重塑渠道管理格局
  • COMSOL氩气双层介质阻挡放电模型——利用等离子体模块的探讨
  • 微信小程序 springboot_uniapp的坭兴陶文化传承与创新系统的设计与实现_a8uyn972
  • 微信小程序 springboot_uniapp的大学生兼职推荐系统的设计与实现_ly2blc52
  • 流水线贴膜机:PLC与触摸屏程序详解,适合初学者学习的简单控制工艺及运动控制教程(支持博图V1...
  • 指针核心训练-位操作-随笔
  • HDFS助力大数据领域的数据高效存储
  • 好写作AI:从目录到成文:好写作AI如何确保章节之间“血脉相连”
  • 微信小程序 springboot_uniapp的大学生校园生活服务系统的 二手 自习室 会议 失物招领40ifxo7d
  • 好写作AI:实证分析“鬼门关”:AI教你从“看着数据发呆”到“思路清晰”
  • 微信小程序 springboot_uniapp的共享停车场系统_4s3tl42j
  • 微信小程序 springboot_uniapp的共享充电桩系统_d40o1910
  • 好写作AI:人机协同建构法:让AI成为你论文的“批判性对话者”
  • 微信小程序 springboot_uniapp的农产品质量追溯系统_gkm0juhi
  • 大模型MCP开发实战:从理论到云原生部署的完整指南
  • Causal LM 和 Prefix LM 的区别