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

题解:P9388 [THUPC 2023 决赛] 先人类的人类选别

题解:P9388 [THUPC 2023 决赛] 先人类的人类选别
📅 发布时间:2026/6/19 18:07:58

更差的阅读体验


考虑差分一下,变成查询一个前缀的和。操作是从左往右做的,所以很好。

经过简单的模拟可以发现,对一个前缀进行一次 \(x\) 的操作,也就是将 \(x\) 扔到前缀里面,然后把最小值扔掉。为啥要扔掉一个最小值?我们扔掉的数就是完成操作之后的 \(x\)。

从这里我们可以看出,对于一个特定的前缀 \(i\),你把 \(x\) 一个一个塞进去,塞一个扔一个的作用效果,其实和塞 \(q\) 个扔 \(q\) 个的作用效果一样,因为实际上我们不关心顺序。所以假设我们进行到第 \(j\) 次操作,前 \(j\) 次操作的 \(x\) 分别是 \(x_1 \sim x_j\),那么我们做的事情其实是维护一个可重集,将 \(a_1 \sim a_i\) 扔进去,把 \(x_1 \sim x_j\) 扔进去,最后把前 \(j\) 小的扔掉。

我们要找一个前缀和一个 \(x\) 的可重集合并起来,前 \(j\) 小的和,不难想到权值线段树加主席树。

具体地,我们对静态的 \(a\) 序列维护主席树,对不断加入的 \(x\) 维护权值线段树。查询的时候,我们把某一个前缀对应的版本树和这个权值线段树加在一起,然后二分求前 \(i\) 小和即可。

复杂度 \(O(n \log n)\),完全不卡常。

#include<bits/stdc++.h>
#define endl '\n'
#define N 500006
using namespace std;
using i64=long long;
int n,q,tot,root,rt[N];
i64 s[N];
struct Node {int sz,ls,rs; i64 sum;} tree[N<<6];
void update(int &p,int q,int l,int r,int k)
{tree[p=++tot]=tree[q];tree[p].sz++,tree[p].sum+=k; if(l==r)return;int mid=l+r>>1; k<=mid?update(tree[p].ls,tree[q].ls,l,mid,k):update(tree[p].rs,tree[q].rs,mid+1,r,k);
}
void update(int &p,int l,int r,int k)
{if(!p)p=++tot; tree[p].sz++,tree[p].sum+=k; if(l==r)return;int mid=l+r>>1; k<=mid?update(tree[p].ls,l,mid,k):update(tree[p].rs,mid+1,r,k);
}
i64 query(int p,int q,int l,int r,int k)
{if(l==r)return 1ll*l*k;int mid=l+r>>1;int lsz=tree[tree[p].ls].sz+tree[tree[q].ls].sz;i64 lsum=tree[tree[p].ls].sum+tree[tree[q].ls].sum;if(lsz>=k)return query(tree[p].ls,tree[q].ls,l,mid,k);return lsum+query(tree[p].rs,tree[q].rs,mid+1,r,k-lsz);
}
main()
{scanf("%d%d",&n,&q);for(int i=1,x;i<=n;i++)scanf("%d",&x),update(rt[i],rt[i-1],1,n,x),s[i]=s[i-1]+x;for(int i=1,x,l,r;i<=q;i++){scanf("%d%d%d",&x,&l,&r),update(root,1,n,x);printf("%lld\n",s[r]-s[l-1]-query(rt[r],root,1,n,i)+query(rt[l-1],root,1,n,i));}return 0;
}

相关新闻

  • 3步掌握:PDFMathTranslate与DeepSeek的终极PDF翻译方案
  • Wan2.2-Animate-14B:用AI技术实现电影级角色动画的完整指南
  • 20251212

最新新闻

  • 2026 常州连锁回收机构排名解析,收的顶凭借资质实力拿下头名 - 奢侈品回收测评
  • 上海水贝回收内幕:卖宝格丽手镯,这份无扣费攻略收好 - 逸程
  • 从图灵测试到ChatGPT:Transformer如何重塑NLP对话系统的未来
  • 北京闲置黄金回收攻略|2026六大正规门店盘点,高价变现无隐形扣费 - 名奢变现站
  • 统计分析与假设检验:从AB测试到因果推断的落地实践
  • 济南正规奢侈品包包回收门店地址,添价收名牌包回收实测评级 - 薛定谔的梨花猫

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 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 号