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

ABC432E sol

eazy ds problem.

题意

给你一个序列 $a$,需要支持单点加 & 全局求 $\max\left(l,\min(r,a_i)\right)$(也就是对于每个 $a_i$,当 $a_i<l$,造成 $l$ 的贡献;当 $a_i \ge r$ 时,造成 $r$ 的贡献;否则造成 $a_i$ 的贡献。)

题解

注意到 $a_i,b_i \le 5\times 10^5$,所以可以考虑使用两个权值树状数组(也就是一个树状数组做的桶)(这两个树状数组下文中分别称为 $sum$ 和 $cnt$)分别维护 $\sum\limits^k_{a_i \le k} a_i$ 以及 $\sum\limits^k_{a_i \le k} cnt_{a_i}$($cnt_i$ 为 $i$ 出现次数)。
然后就容易了。

  • 单点加就是单点修改 $sum_{a_x},cnt_{a_x},sum_y,cnt_y$。

  • 查询时需要特判 $l>r$ 输出 $nl$,否则

    • 对于所有小于 $l$ 的数,它们对和造成的贡献都是 $l$;
    • 对于所有大于 $r$ 的数,它们对和造成的贡献都是 $r$;
    • 其它数,它们对答案的贡献为它本身。

    发现前两类贡献用 $cnt$ 维护、最后一类贡献用 $sum$ 维护即可。

所以,我们在 $O((n+q) \log V)$ 的复杂度解决了此题。

注意:由于 query 可能访问到 $0$ 和 $-1$,所以下标通通 $+2$。

代码

#include<bits/stdc++.h>
#define int long long
#define rep(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
int tr[500005],a[500005];
struct fenwick{int tr[500015];void upd(int x,int y){x+=2;while(x<=500005) tr[x]+=y,x+=x&-x;}int que(int x){x+=2;int r=0;while(x) r+=tr[x],x&=x-1;return r;}	
}cnt,sum;
signed main(){int n,q;cin>>n>>q;rep(i,1,n) cin>>a[i],cnt.upd(a[i],1),sum.upd(a[i],a[i]);while(q--){int op,x,y;cin>>op>>x>>y;if(op==1){cnt.upd(a[x],-1),cnt.upd(y,1);//删除 a_x,增加 ysum.upd(a[x],-a[x]),sum.upd(y,y);//删除 a_x,增加 ya[x]=y;}else{if(x>y) cout<<n*x<<"\n";//特判else cout<<(cnt.que(x-1)*x+(n-cnt.que(y))*y)+sum.que(y)-sum.que(x-1)<<"\n";// <l 的数的贡献;>r 的数的贡献;l~r 的数的贡献。}}return 0;
}
http://www.gsyq.cn/news/50687.html

相关文章:

  • 完整教程:linux离线环境局域网远程ssh连接vscode
  • 01命题逻辑的基本概念
  • 第26天(简单题中等题 二分查找、贪心算法)
  • DAY1 JAVA PreLearning
  • 【服务器】服务器被攻击植入了挖矿病毒,CPU一直占用100%,@monthly /root/.cfg/./dealer病毒清除 - 实践
  • Python 异常处理全面详解(附丰富实例)
  • IServiceCollection和IServiceProvider
  • 完整教程:Redis 事务机制:Pipeline、ACID、Lua脚本
  • 斐波那契数列相关恒等式
  • Python 文件操作全面详解:从基础到进阶(附丰富实例)
  • 银行中外汇的由来(金融产品经理必读)
  • 云服务器部署Python后端偶遇`ImportError`: 从依赖版本到Python升级的排错全攻略 - 实践
  • AI元人文:悟空继续追问
  • 关于梯形波叠加三角波的电磁波对宇宙射线的电磁感应的分析
  • 20251115 - Hash
  • 记录一次Windows复制粘贴不正常的情况
  • apache和nginx解析php和lnmp和lamp搭建
  • 跨域问题解决方案汇总
  • 详细介绍:像素退场,曲线登场:现代响应式 CSS 全家桶 | 领码课堂
  • HTTPS 究竟比 HTTP 好在哪?
  • 小苯的因子查询
  • Linux网络--6、网络层 - 详解
  • 原型理解从入门到精通
  • 简单做一个舒尔特方格小游戏
  • C语言新手怎么快速掌握
  • Wi-Fi FTM(Fine Timing Measurement)简介
  • LISTAGG 用于将多行数据聚合为单行字符串(拼接),而与其功能相反的需求是 将单行字符串按指定分隔符拆分为多行数据
  • Atcoder FPS 24 记录
  • 扩展单调栈扫描线维护历史信息
  • 酵母单杂交 (Y1H):蛋白质 - DNA 互作研究的 基因解码器