尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

P10194 [USACO24FEB] Milk Exchange G 做题记录

P10194 [USACO24FEB] Milk Exchange G 做题记录
📅 发布时间:2026/6/22 2:09:13

思路(暴力 1)

我们可以先想一个最简单的暴力:遍历每一秒,每一秒的时候遍历每个奶牛来模拟题意。

但是发现这样的暴力没有优化的前景,考虑换一种暴力。

思路(暴力 2)

可以先假设每个奶牛的容量都一样大,那么所有奶牛都不会溢出,由此可以猜测第 i 秒溢出的数量就是前面 i 个奶牛的最小值减去目前这个奶牛的容量,由此可以写出第二个暴力,但是这个暴力和第一个暴力的区别在于这个每次查询是静态的,不像第一种暴力是动态的,可以考虑如何优化。

正解

我们可以通过单调队列得出每个奶牛在的最大的区间使得这个奶牛是这个区间的最小值。

那么由此就可以直接优化了,只不过要注意的是如果两个奶牛的容量同样是一个区间的最小值,我们可以采用单调队列一边是找到第一个小于目前值的,另一边是找到第一个小于等于目前值的,这样就可以解决这种问题。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
/*
*/
int n, a[1000005], d[1000005], sum, m[1000005];
int lowbit(int x) {return x & (-x);
}
int t[1000005], t2[1000005];
void addmax(int x, int y) {a[x] = y;for (int i = x; i <= n * 2; i += lowbit(i)) {t[i] = a[i];for (int j = 1; j < lowbit(i); j *= 2) {t[i] = min(t[i], t[i - j]);}}
}
int qmin(int l, int r) {int maxn = 1e18;while (l <= r) {maxn = min(maxn, a[r]);r --;for (; r - lowbit(r) >= l; r -= lowbit(r)) {maxn = min(maxn, t[r]);}} return maxn;
}
int r[1000005], l[1000005], d2[1000005];
int s[1000005];
signed main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);cin >> n;memset(t, 0x7f, sizeof t);for (int i = 1; i <= n; i ++) cin >> a[i], sum += a[i], m[i] = a[i], addmax(i, a[i]);a[n + 1] = a[1];a[0] = a[n];// for (int i = 1; i <= n; i ++) d[i] = a[i];// d[0] = a[n];for (int i = n + 1; i <= 2 * n; i ++) a[i] = a[i - n], m[i] = m[i - n], addmax(i, a[i]);for (int i = 1; i <= n * 2; i ++) s[i] = s[i - 1] + a[i];stack <int> st;for (int i = n * 2; i >= 1; i --) {while (st.size() && a[st.top()] >= a[i]) st.pop();if (st.size()) r[i] = st.top();else r[i] = n * 2 + 1;st.push(i);}while (st.size()) st.pop();for (int i = 1; i <= n * 2; i ++) {while (st.size() && a[st.top()] > a[i]) st.pop();if (st.size()) l[i] = st.top();else l[i] = 0;st.push(i);}int pos = 0;a[pos] = 1e18;for (int i = 1; i <= n; i ++) if (a[i] < a[pos]) pos = i;for (int i = pos + 1; i <= pos + n; i ++) {if (r[i] != 2 * n + 1 && a[i] != a[pos]) {int ll = r[i] - i;int rr = r[i] - l[i];// cout << i << " " << ll << " " << rr << "\n";d2[ll] += a[i] - a[r[i]];d2[rr] -= a[i] - a[r[i]];} }// cout << endl;// for (int i = pos + 1; i <= pos + n; i ++) {// if (a[i] <= a[pos]) continue;// cout << i << " " << 1 << " " << (r[i] - l[i] - 1 + 1) << "\n";// if (r[i] != n * 2 + 1) {//     d2[1] += a[i] - max(a[l[i]], a[r[i]]);//     d2[(r[i] - l[i] - 1) + 1] -= a[i] - max(a[l[i]], a[r[i]]);// }// }for (int i = 1; i <= n; i ++) {d[i] = 0;d[i] = d[i - 1] + d2[i];}for (int i = 1; i <= n; i ++) {m[i] = 0;m[i] = m[i - 1] + d[i];}for (int i = 1; i <= n; i ++) {cout << sum - m[i] << "\n";}// cout << qmin(1, 3) << "\n";// for (int j = 1; j <= n; j ++) {//     for (int i = n + 1; i <= n * 2; i ++) {//         // cout << i << " " << a[i] << " " << j << "\n";//         int minn = 1e18;//         // for (int k = i - j; k < i; k ++) {//         //     minn = min(minn, m[k]);//         // }//         minn = qmin(i - j, i - 1);//         // cout << minn << "\n";//         if (minn > m[i]) {//             sum -= (minn - m[i]);//             // a[i] = m[i];//         }//         else {//             // a[i] = d[i - 1];//         }//     }//     // for (int i = n + 1; i <= n * 2; i ++) d[i] = a[i];//     // for (int i = 1; i <= n; i ++) a[i] = a[i + n], d[i] = d[i + n];//     cout << sum << "\n";// }return 0;
}

相关新闻

  • 点云配准基础知识
  • 完整教程:Android监听第三方播放获取音乐信息及包名
  • 【JEECG 组件扩展】JSwitch开关组件扩展单个多选框样式 - 详解

最新新闻

  • 免费开源:解锁AMD Ryzen处理器隐藏性能的终极调试神器
  • 2026年在县域城市开闪电仓加盟,浣熊优先超市的全流程托管扶持到底有多省心?详解7步扶持体系 - 米諾
  • ATmega406 Timer0 PWM模式详解:从寄存器配置到电机控制实战
  • 嵌入式系统复位与低功耗模式设计:从原理到NXP KV5x实战
  • 实战指南:如何用3D打印技术构建低成本高精度Capstan-Drive机器人执行器
  • 五款图片处理工具实测分享,批量修图、放大、去水印抠图全都有

日新闻

  • 2026速览惠州叛逆青少年学校前十大排名名单出炉 - 武汉中职最新信息发布
  • 2026上饶白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 天龙八部单机版终极数据管理工具:5个技巧快速掌握游戏数据编辑

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号