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

「LAOI-9」Update

「LAOI-9」Update
📅 发布时间:2026/6/18 3:03:04

A 性质

首先使用差分维护每个 \(a_i\) 的操作次数。

不难发现由于数的种类很少,因此直接用一个数组记录每个数 \(i\) 操作 \(j\) 次后的值。预处理完后,记 \(A\) 为 \(a_i\) 的最大值,则时间复杂度 \(O(mA)\)。

for( int i = 1 ; i <= 100 ; i ++ )
{f[i][0] = i;for( int j = 1 ; j <= m ; j ++ )f[i][j] = f[i][j - 1] + lg[f[i][j - 1]];
}

正解

其实我们可以从 A 性质出发继续思考。当值域达到 \(10^5\) 时,我们需要寻找一个能平衡时间空间的做法。如果一次能够完成不止一次操作,那么运行效率将得到提高。不难想到可以倍增,记 \(f_{i,j}\) 表示从 \(i\) 进行 \(2^j\) 次操作得到的数,则 \(f\) 是好预处理的。同时 \(i\) 的上界也是确定的,由于 \(10^5 \times 20 < 2^{21}\),故 \(\log_2i\) 不超过 \(20\),即修改后的 \(i\) 不超过 \(2.1 \times 10^6\)。剩下的就不难了。

令 \(A=2.1 \times 10^6\),则总时间复杂度 \(O(n+m+(n+A)\log m)\),可以通过。

#include <iostream>
#include <cstdio>using namespace std;int N = 2100010;
int n,m,a[200001],l,r,d[200001],f[2400001][19],lg[2400001];int g( int x , int y )
{for( int i = 18 ; i >= 0 ; i -- )if( y & ( 1 << i ) )x = f[x][i];return x;
}int read( void )
{int x = 0,f = 1;char ch = getchar();while( ch < '0' || ch > '9' ) ch = getchar();while( ch >= '0' && ch <= '9' ) x = x * 10 + ch - '0',ch = getchar();return x * f;
}void write( int x )
{if( x <= 9 ){putchar( x + '0' );return;}write( x / 10 );putchar( x % 10 + '0' );return;
}int main()
{cin >> n >> m;lg[1] = 0,f[1][0] = 1;for( int i = 2 ; i <= N ; i ++ )lg[i] = lg[i >> 1] + 1,f[i][0] = i + lg[i];for( int j = 1 ; j <= 18 ; j ++ )for( int i = 1 ; i <= N ; i ++ )f[i][j] = f[f[i][j - 1]][j - 1];for( int i = 1 ; i <= n ; i ++ )a[i] = read();while( m -- ){l = read(),r = read();d[l] ++,d[r + 1] --;}for( int i = 1 ; i <= n ; i ++ ){d[i] += d[i - 1];write( g( a[i] , d[i] ) );putchar( ' ' );}return 0;
}

有一种实际效率更高的解法。大致思路是考虑当前需要多少次操作才能使当前 \(\lfloor \log_2 a_i \rfloor\) 增加 \(1\),显然这个操作次数为 \(\lceil \dfrac{2^{\lfloor \log_2 a_i \rfloor+1}-a_i}{\lfloor \log_2 a_i \rfloor} \rceil\)。将其与剩余操作次数比较并计算即可,注意特判 \(\lfloor \log_2 a_i \rfloor=0\) 的情况。时间复杂度也是线性对数。以下给出这种解法的实现。

#include <iostream>
#include <cstdio>
#include <cmath>
#define N 200001using namespace std;int n,a[N],d[N],m,l,r,k,tt;int main()
{cin >> n >> m;for( int i = 1 ; i <= n ; i ++ )cin >> a[i];while( m -- ){cin >> l >> r;d[l] ++,d[r + 1] --;}for( int i = 1 ; i <= n ; i ++ ){d[i] += d[i - 1];m = d[i];k = int( log2( a[i] ) );if( k == 0 ){cout << a[i] << ' ';continue;}while( m ){tt = ( ( 1 << ( k + 1 ) ) - a[i] ) / k;if( ( ( 1 << ( k + 1 ) ) - a[i] ) % k ) tt ++;if( tt >= m ){a[i] += m * k;m = 0;}else{a[i] += tt * k;m -= tt;}k ++;}cout << a[i] << ' ';	}return 0;
}
我们会走到一起的。

相关新闻

  • ABC393F
  • ABC389F
  • ABC150 C-F

最新新闻

  • 西安专业定制私家团旅行社排行 合规服务商盘点 - 起跑123
  • 2026 北京黄金回收实力梯队公示,全城优质连锁门店实力深度盘点 - 奢侈品回收测评
  • 嵌入式调试实战:观察点与寄存器操作在CodeWarrior中的高效应用
  • 2026成都黄金回收价格对比:收的顶同城高价回收实测 - 奢侈品回收评测
  • 2026年6月最新雅典中国官方售后电话地址及客户服务网点查询 - 亨得利官方服务中心
  • 上海非法吸收公众存款罪律师推荐|非吸、企业融资、团队涉案辩护 - 法律资讯

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

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