当前位置: 首页 > 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.jsqmd.com/news/88391/

相关文章:

  • 本地部署开源可视化界面开发工具 Node-RED 并实现外部访问( Windows 版本)
  • U249090 密码门 私题题解
  • 2025企业AI部署革命:T-pro-it-2.0-GGUF如何让本地化门槛直降60%?
  • JSP如何实现大文件分片上传与多线程上传?
  • 三相共直流母线式光储VSG/虚拟同步机逆变器模型仿真:离散化快速运行与前级PV最大功率追踪控制
  • Sed 例程大全
  • 【Vue3】 中 ref 与 reactive:状态与模型的深入理解
  • 实习面试题-Zookeeper 面试题
  • 双机并联虚拟同步发电机仿真模型:均分负载与优质波形输出,可拓展自适应与光伏储能技术
  • 清除企业不良记录的通知
  • Grep 例程大全
  • python环境及pip的操作
  • 管理Linux的联网
  • HTTP协议在JSP大附件上传中如何优化性能?
  • 网页前端如何通过JSP实现大文件秒传功能?
  • Ursa.Avalonia样式系统终极指南:5大技巧助你构建企业级UI
  • Asio应用(高级):构建高性能、安全、跨平台的网络系统
  • 实习面试题-Spark SQL 面试题
  • CF958A1 Death Stars (easy) 解题报告
  • PS 例程大全
  • wangEditor导入excel数据到html富文本编辑
  • 如何利用JSP实现信创环境的大文件上传?
  • 实习面试题-Kotlin 面试题
  • CF1619G Unusual Minesweeper 解题报告
  • 毕设 stm32 RFID员工打卡门禁系统(源码+硬件+论文)
  • 基于vue的个人博客论坛交流网站_sdj10346_springboot php python nodejs
  • 光伏电池simulink仿真模型 光伏电池建模仿真 包括改变温度 改变辐照度的特性分析 模型可...
  • JSP中如何利用分块技术实现百万文件上传优化?
  • 多交换机VLAN的划分,配置trunk中继链路,链路聚合配置, 利用路由器连接网络,配置静态路由
  • JSP中如何集成SM4加密实现大文件上传存储安全?