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

*题解:P3586 [POI 2015 R2] 物流 Logistics

*题解:P3586 [POI 2015 R2] 物流 Logistics
📅 发布时间:2026/6/19 11:28:44

原题链接

解析

考虑能每次选 \(c\) 个正数进行 \(s\) 次 \(-1\) 操作的充要条件是什么。首先由于只进行 \(s\) 次操作,可以将 \(> s\) 的数视为 \(s\)。然后求和,如果和 \(< c \cdot s\),那么必定无法操作,反之是否必定可以操作呢?我们尝试将这 \(n\) 个数合并成 \(c\) 个,如果都能合并出 \(s\) 就说明可以,一个朴素的想法是将每个数分解成其数值个元素,直接一个一个堆起来,就像这样:

c = 3,s = 5
5 4 2
5 4 2
3 5 1
3 5 4
3 5 4

由于我们已经将 \(> s\) 数视为 \(s\),所以不可能出现同一层中的两个元素属于同一个数的情况。

于是问题就变为如何求 \(\le s\) 部分的和。考虑开两个权值树状数组,一个存数值和,一个存出现次数,要求的其实就是 \(sum + cnt \cdot s\),其中 \(sum\) 是 \(\le s\) 的数的和,\(cnt\) 是 \(> s\) 的数的个数。

时间复杂度 \(O(m\log n)\)。

代码

#include <bits/stdc++.h>
#define ls(p) ((p) << 1)
#define rs(p) (((p) << 1) | 1)
#define mid ((l + r) >> 1)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 1e6 + 5,M = 5e5,mod = 998244353;
int a[N];
ll cnt[N];
ll sum[N];
struct Query{char op;int x,y;
}q[N];
void add(ll b[],int x,int k){for(;x < N;x += x & -x){b[x] += k;}
}
ll ask(ll b[],int x){ll res = 0;for(;x;x -= x & -x){res += b[x];}return res;
}
int read(){int a = 1,x = 0;char ch = getchar();while(ch > '9' || ch < '0'){if(ch == '-') a = -1;ch = getchar();}while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}return a * x;
}
int main(){ios::sync_with_stdio(false);cin.tie(0);
//	freopen("in.txt","r",stdin);
//	freopen("out.txt","w",stdout);vector<int> v;v.push_back(0);int n,m;n = read(),m = read();for(int i=1;i<=m;i++){q[i].op = getchar();q[i].x = read();q[i].y = read();v.push_back(q[i].y);}sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end());for(int i=1;i<=n;i++){add(cnt,1,1);}for(int i=1;i<=m;i++){if(q[i].op == 'U'){int p = lower_bound(v.begin(),v.end(),a[q[i].x]) - v.begin() + 1;add(sum,p,-a[q[i].x]);add(cnt,p,-1);a[q[i].x] = q[i].y;p = lower_bound(v.begin(),v.end(),a[q[i].x]) - v.begin() + 1;add(sum,p,a[q[i].x]);add(cnt,p,1);}else{int p = lower_bound(v.begin(),v.end(),q[i].y) - v.begin() + 1;ll x = ask(sum,p) + (n - ask(cnt,p)) * q[i].y;if(x >= 1ll * q[i].x * q[i].y){cout<<"TAK\n";}else{cout<<"NIE\n";}}}return 0;
}

相关新闻

  • 一类将度数变为 1/2 的优化建图 笔记
  • 2025 年锚具厂家 TOP 企业品牌推荐排行榜,橡胶支座 / 桥梁支座 / 国标支座 / 滑板支座 / 固定支座 / 弹性支座 / 活动铰支座 / 盆式支座 / 减震支座 / 缓冲支座公司推荐!
  • 软件工程学习日志2025.11.17

最新新闻

  • 大兴安岭地区黄金回收去哪儿好?整理了5家靠谱实体店地址电话 - 三大殿
  • 承德市今日黄金回收价格多少?本地5家口碑门店报价参考 - 马刺总冠军
  • 2026 正规备案收金店,称重透明结算无隐藏扣费 - 讯息早知道
  • 贺州市黄金回收实体店怎么选?这份清单帮你货比三家 - 开始就结束
  • 金华市黄金回收猫腻多怎么办?整理了5家诚信回收店供参考 - 三大殿
  • 2026安徽省宣城市中考一两百分怎么办?口碑优选宠物护理专业最新发布 - cc江江

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

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

关于尧图

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

服务项目

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

快速链接

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

联系方式

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

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