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

CF1891B Deja Vu 解题报告

题目传送门

题意已经叙述的很清楚,这里不再赘述。

思路

在这里我第一眼的思路是分块或者是线段树,可能是数据结构题做多 了留下来的后遗症吧,但在这里这个题作为 B 题,肯定有不用高级数据结构的做法。

然后我就发现了一个性质,如果一个数是 \(2^x\) 的倍数,那么它可以写成 \(k\times 2^x=2k\times 2^{x-1}\),那么它加上 \(2^{x-1}\) 之后就变成了 \((2k+1)\times 2^{x-1}\),由于 \(2k-1\) 为奇数,那么它肯定不会再是 \(2^x\) 的倍数(也必然不会是 \(2\) 的更高次幂的倍数),而只是 \(2^{x-1}\) 的倍数。

有了这个性质,那么假设一个数是 \(2^{30}\) 的倍数,那么它最多进行 \(30\) 次操作就不能进行任何操作,所以最好的复杂度就是每次只修改需要修改的数。

我们考虑把 \(2^i(1\le i\le 30)\) 的倍数的下标给维护成一个队列 \(i\)\(2^0\) 的倍数由于不可能在进行任何操作,所以可以维护也可以不维护),每次操作取出所有大于等于 \(x\) 的队列的所有下标进行操作,操作完之后扔到 \(x-1\) 的队列中。

时间复杂度 \(O(30\sum n)\)

AC Code

#include<iostream>
#include<queue>
#define N 100005
using namespace std;
int T,n,q;
int a[N];
queue<int>que[31];//第i个队列存2^i的倍数 
int re()//朴素的快读 
{int x=0,p=1;char y=getchar();for(;y>'9'||y<'0';y=getchar())if(y=='-')p=-p;for(;y>='0'&&y<='9';y=getchar())x=x*10+y-'0';return x*p;
}
void wr(int x)//朴素的快写 
{if(x<0)putchar('-'),x=-x;if(x>9)wr(x/10);putchar(x%10+'0');
}
signed main()
{T=re();while(T--){n=re(),q=re();for(int i=1;i<=n;i++)//O(30n){a[i]=re();int l=0;for(;l<=30;l++)if(a[i]%(1<<l))//找出第一个不满足为2^l倍数的数 break;que[l-1].push(i);}while(q--){int x=re();for(int i=30;i>=x;i--)//O(30n)while(que[i].size()){int now=que[i].front();que[i].pop();a[now]+=(1<<(x-1));que[x-1].push(now);}}for(int i=1;i<=n;i++)wr(a[i]),putchar(' ');putchar('\n');for(int i=1;i<=30;i++)//用完清空,复杂度O(n) while(que[i].size())que[i].pop();}return 0;
}
http://www.rkmt.cn/news/98695.html

相关文章:

  • python环境及pip的操作
  • 清除企业不良记录的通知
  • 实习面试题-Zookeeper 面试题
  • 管理Linux的联网
  • CF958A1 Death Stars (easy) 解题报告
  • PS 例程大全
  • 如何利用JSP实现信创环境的大文件上传?
  • 实习面试题-Kotlin 面试题
  • JSP中如何利用分块技术实现百万文件上传优化?
  • Vim 分屏操作详解
  • wangEditor粘贴ppt母版样式自动适配网页
  • 63、技术综合指南:系统配置、数据库管理与网络应用
  • 嗨! Coze 的 AI 漫游:解锁智能体与工作流,轻松拿捏智能应用(1) - 实践
  • 50、Mono应用开发与Linux机器安全防护
  • 51、Linux 系统安全防护全攻略
  • 告别 AI 信息焦虑!这 5 个公众号,帮你轻松跟上智能时代节奏 - 品牌鉴赏师
  • 52、系统性能调优指南
  • Unity学习笔记(十七)GUI控件(一)
  • Origin科研绘图——手把手教你“分段拟合”
  • 53、Linux 系统优化与命令行操作指南
  • 54、Linux命令行与软件管理全攻略
  • 2025年年终无人机吊运公司推荐:不同预算与项目规模下的性价比分析与5家服务商对比 - 品牌推荐
  • 56、Linux内核与模块管理全解析
  • 英语_阅读_CIMON 2_待读
  • vue基于Spring Boot框架的学生干部选举管理系统的设计与实现_4q46dzc1
  • 35、脚本开发中的故障排除、流程控制与参数处理
  • 如何选择靠谱的无人机吊运服务商?2025年年终最新市场深度解析及5家实力公司推荐! - 品牌推荐
  • 26、GNOME开发中的实用组件与功能详解
  • 27、GNOME开发:Druids、会话管理及Glade使用指南
  • Comsol仿真:相场法多晶铁电体介电击穿模拟全解析