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

P12894 [蓝桥杯 2025 国 Java B] 智能交通信号灯

[Problem] \color{blue}{\texttt{[Problem]}} [Problem]

给定一个长度为 n n n 的数组 a 1 … n a_{1\dots n} a1n,进行 m m m 次一下操作:

  1. 给定 l , r l,r l,r,求出 ∑ l ≤ i < j ≤ r mex { a i , a j } \sum\limits_{l \leq i < j\leq r}\text{mex}\{a_{i},a_{j}\} li<jrmex{ai,aj}。其中 mex { x 1 , x 2 , … , x n } \text{mex}\{ x_{1},x_{2},\dots,x_{n} \} mex{x1,x2,,xn} 表示大于等于 1 1 1 的最小的未在 x 1 … n x_{1 \dots n} x1n 中出现的整数。
  2. 给定 k , x k,x k,x,修改 a k = x a_{k}=x ak=x

1 ≤ n , m ≤ 1 × 10 5 , 1 ≤ l < r ≤ n , 1 ≤ k ≤ n , 1 ≤ a i , x ≤ 1 × 10 9 1 \leq n,m \leq 1\times 10^{5}, 1 \leq l < r \leq n, 1 \leq k \leq n, 1\leq a_{i},x \leq 1 \times 10^{9} 1n,m1×105,1l<rn,1kn,1ai,x1×109

[Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis]

其实 mex { x , y } ( x < y ) \text{mex}\{x,y\}(x<y) mex{x,y}(x<y) 的取值无非就是 1 , 2 , 3 1,2,3 1,2,3

  • x = 1 , y = 2 x=1,y=2 x=1,y=2 时, mex = 3 \text{mex}=3 mex=3
  • x = 1 , y ≠ 2 x=1,y \not = 2 x=1,y=2 时, mex = 2 \text{mex}=2 mex=2
  • 否则 mex = 1 \text{mex}=1 mex=1

这题到这里也就做完了。

开一个树状数组分别统计区间内 1 , 2 1,2 1,2 出现的次数就可以了。

记得开 long long。

Code \color{blue}{\text{Code}} Code

const int N=1e5+100;class Fenwick_Tree{public:void set_size(int n){this->n=n;for(int i=1;i<=n;i++)c[i]=0;}void modify(int x,int val){for(int i=x;i<=n;i+=lowbit(i))c[i]+=val;}int query(int x){int ans=0;for(int i=x;i;i-=lowbit(i))ans+=c[i];return ans;}private:int c[N],n;int lowbit(int x){return x&(-x);}
}cnt[2];int query(int num,int l,int r){if (num<1||num>2) return -1;--num;return cnt[num].query(r)-cnt[num].query(l-1);
}typedef long long ll;
#define sum(n) (1ll*(n)*((n)-1)/2)
ll query(int l,int r){int n=r-l+1;int x=query(1,l,r),y=query(2,l,r),z=n-x-y;return 3ll*x*y+2ll*sum(x)+2ll*x*z+1ll*(sum(n)-1ll*x*y-sum(x)-1ll*x*z);
}int n,m,a[N];int main(){n=read();m=read();cnt[0].set_size(n);cnt[1].set_size(n);for(int i=1;i<=n;i++){a[i]=read();if (a[i]<=2)cnt[a[i]-1].modify(i,1);}for(int i=1;i<=m;i++){int opt=read(),l=read(),r=read();if (opt==1) printf("%lld\n",query(l,r));else{if (a[l]<=2)cnt[a[l]-1].modify(l,-1);a[l]=r;if (a[l]<=2)cnt[a[l]-1].modify(l,1);}}return 0;
}

顺便一说,这题的数据好水啊。犯了一个及其低级的错误,但是还能拿 75 75 75 分。

不过可以理解,毕竟修改操作 a i , x a_{i},x ai,x 都大于等于 3 3 3 时等于没改,如果数据纯随机的话,大部分修改都是没用的。

	for(int i=1;i<=m;i++){int opt=read(),l=read(),r=read();if (opt==1) printf("%lld\n",query(l,r));else{if (a[l]<=2)cnt[a[l]-1].modify(i,-1);a[l]=r;if (a[l]<=2)cnt[a[l]-1].modify(i,1);}}

考验一下大家,能不能超出错误在哪。

http://www.lqws.cn/news/460639.html

相关文章:

  • 伸缩线充电宝推荐丨倍思灵动充45W突破移动界限!
  • 计算机——硬盘驱动器
  • 结构体解决冒泡排序
  • 多线程八股
  • 【Go语言基础】对齐边界与内存填充
  • 初学python的我开始Leetcode题10-2
  • Vuex(一) —— 集中式的状态管理仓库
  • AI 产品的“嵌点”(Embedded Touchpoints)
  • 如何落地你的AI创意
  • 一体三面:UEBA在数据分析、数据治理与数据安全中的应用洞察
  • 【Flink实战】 Flink SQL 中处理字符串 `‘NULL‘` 并转换为 `BIGINT`
  • 零基础入门PCB设计 一实践项目篇 第四章(STM32开发板PCB设计)
  • 破解数据可视化难题:带轴断裂的柱状图绘制全指南
  • Maven并行构建
  • IPv6 | 地址解析 / 地址管理 / 邻居发现协议(NDP)/ 无状态自动配置(SLAAC)
  • 智能群跃小助手发布说明
  • 还原自动驾驶的“前世今生”:用 Python 实现数据记录与回放系统
  • 二分查找----1.搜索插入位置
  • Java虚拟机解剖:从字节码到机器指令的终极之旅(七)
  • 端侧AI+OS垂直创新研究报告
  • 微软应用商店打不开怎么办2025,打开TLS1.3
  • shell脚本--变量及特殊变量,算术逻辑运算
  • C++ 构造函数
  • 谷歌浏览器电脑版官方下载- Google Chrome官方网页版入口
  • 猿人学js逆向比赛第一届第九题
  • window显示驱动开发—输出合并器阶段
  • 什么是Vue.js
  • Java 编程之代理模式
  • 大模型与搜索引擎的技术博弈及未来智能范式演进
  • 深入解析:如何实时获取Socket接收缓冲区的数据量