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

Salary Queries

题目描述:
一家公司有 n 名员工,每名员工都有一定的薪水。你的任务是记录这些薪水并处理查询。

输入:
第一行输入两个整数 n 和 q:分别表示员工数量和查询数量。员工编号为 1、2、……、n。
接下来一行有 n 个整数 p₁、p₂、……、pₙ:表示每名员工的薪水。
之后有 q 行,每行描述一个查询,查询有以下两种形式:

  • ! k x:将员工 k 的薪水改为 x
  • ? a b:统计薪水在 a 到 b(包含 a 和 b)之间的员工数量

限制条件:
1 ≤ n, q ≤ 2×10⁵
1 ≤ pᵢ ≤ 10⁹
1 ≤ k ≤ n
1 ≤ x ≤ 10⁹
1 ≤ a ≤ b ≤ 10⁹

输出:
对于每个?查询,输出对应的结果。

样例输入:
5 3
3 7 2 2 5
? 2 3
! 3 6
? 2 3

样例输出:
3
2

因为x范围1-e9,全部枚举会爆,只计算可能出现的数值即可

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;int n,t,q[N][2],price[N],tree[N*6];
char sign[N];
vector<int>vals;void update(int node,int l,int r,int idx,int delta)
{if(l==r){tree[node]+=delta;return;}int mid=(l+r)>>1;if(idx<=mid)update(node*2,l,mid,idx,delta);else update(node*2+1,mid+1,r,idx,delta);tree[node]=tree[node*2]+tree[node*2+1];
}int query(int node,int l,int r,int a,int b)
{if(l>b||r<a)return 0;if(l>=a&&r<=b)return tree[node];int mid=(l+r)>>1;return query(node*2,l,mid,a,b)+query(node*2+1,mid+1,r,a,b);
}int get_idx(int x)
{return lower_bound(vals.begin(),vals.end(),x)+1-vals.begin();
}int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);set<int>all;vector<int>a;cin>>n>>t;for(int i=1;i<=n;++i){cin>>price[i];all.insert(price[i]);}for(int i=0;i<t;++i){cin>>sign[i]>>q[i][0]>>q[i][1];if(sign[i]=='!')all.insert(q[i][1]);}vals.assign(all.begin(),all.end());int m=vals.size();for(int i=1;i<=n;++i){int idx=get_idx(price[i]);update(1,1,m,idx,1);} for(int i=0;i<t;++i){if(sign[i]=='!'){int k=q[i][0];int x=q[i][1];int idx;idx=get_idx(price[k]);price[k]=x;update(1,1,m,idx,-1);idx=get_idx(x);update(1,1,m,idx,1);}else{int a=q[i][0];int b=q[i][1];int idx1=get_idx(a);int idx2=upper_bound(vals.begin(),vals.end(),b)-vals.begin();cout<<query(1,1,m,idx1,idx2)<<'\n';}}return 0;
}

http://www.lryc.cn/news/621738.html

相关文章:

  • 商品数据仓库构建指南:TB 级淘宝 API 历史详情数据归档方案
  • 8.15网络编程——UDP和TCP并发服务器
  • ​​金仓数据库KingbaseES V9R1C10安装教程 - Windows版详细指南​
  • MySQL知识点(上)
  • 复杂度扫尾+链表经典算法题
  • 开发避坑指南(27):Vue3中高效安全修改列表元素属性的方法
  • 科普:Pygame 中,`pg.Surface` v.s. `screen`
  • 力扣 hot100 Day74
  • wordpress忘记密码怎么办
  • 2025最新:如何禁止指定软件联网?
  • php危险函数,二.assert()[现版本已弃用]
  • 基于nodejs+express的网上零食销售系统/零食商城平台
  • 智和信通全栈式运维平台落地深圳某学院,赋能运维管理提质提效
  • Golang信号处理实战
  • Chrome插件开发实战:从架构到发布全流程
  • HarmonyOS 实战:用 List 与 AlphabetIndexer 打造高效城市选择功能
  • 固定资产管理系统 OCR 识别功能技术解析
  • 架构需求规格说明(ARD):项目成功的隐形引擎
  • Android RxJava 过滤与条件操作详解
  • 小兔鲜儿-小程序uni-app(二)
  • 阿里云杭州 AI 产品法务岗位信息分享(2025 年 8 月)
  • Baumer高防护相机如何通过YoloV8深度学习模型实现驾驶员疲劳的检测识别(C#代码UI界面版)
  • 分享一个基于Hadoop的二手房销售签约数据分析与可视化系统,基于Python可视化的二手房销售数据分析平台
  • 企业级Spring事务管理:从单体应用到微服务分布式事务完整方案
  • OpenCV Python——图像查找(特征匹配 + 单应性矩阵)
  • 【解决笔记】MyBatis-Plus 中无 selectList 方法
  • Linux815 shell:while
  • 鸿蒙任务调度机制深度解析:优先级、时间片、多核与分布式的流畅秘密
  • 我的学习认知、高效方法与知识积累笔记
  • Ubuntu20.04下Px4使用UORB发布消息