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

Codeforces Global Round 27

ABC 略

D

将每个数拆成x*2的整数次幂,一个直接的想法是尽量把2的整数次幂给大的数。那么所有乘上2的整数次幂的数构成的序列单调递减,反证法,如果序列中存在i j 使得a[i]<a[j],那么我们不如把给a[i]乘的2的幂给a[j]乘。

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10,mod=1e9+7;
int T,n,a[N],b[N],sta[N],st[N],cnt,sum,s;
void init()
{cnt=sum=s=0;for(int i=1;i<=n;i++) b[i]=0;
}
int power(int x,int y)
{int ans=1,w=x;for(;y;y>>=1){if(y&1) ans=(ans*w)%mod;w=w*w%mod;}return ans%mod;
}
bool pd(int x,int y,int z)
{int ans=x,w=2;for(;y;y>>=1){if(y&1){if(ans*w>1e9) return true;ans=ans*w;}w=w*w;}if(ans>z) return true;return false;
}
void solve()
{cin>>n;init();for(int i=1;i<=n;i++){cin>>a[i];while(a[i]%2==0&&a[i]>1){a[i]/=2;b[i]++;}}for(int i=1;i<=n;i++){while(cnt&&pd(a[i],b[i],sta[cnt])){b[i]=(b[i]+st[cnt])%mod;s=(s+sta[cnt])%mod;sum=(sum-sta[cnt]*power(2,st[cnt])+mod)%mod;cnt--;}sta[++cnt]=a[i];st[cnt]=b[i];sum=(sum+a[i]*power(2,b[i]))%mod;cout<<(sum+s)%mod<<" ";}cout<<endl;
}
signed main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>T;while(T--) solve();
}

http://www.dtcms.com/a/312180.html

相关文章:

  • 衡石湖仓一体架构深度解构:统一元数据层如何破除数据孤岛?
  • C++11 -- 智能指针
  • 【故障处理】redis会话连接满导致业务系统某个模块数据不显示
  • JJWT 核心工具类 Jwts 源码解析
  • 3 数字字符串格式化
  • 安灯系统(Andon System)
  • h3c路由器查看温度是否正常
  • 记录一次Spring Cloud Gateway配置的跨域处理:解决 ‘Access-Control-Allow-Origin‘ 头包含多个值的问题
  • 【Shell自动化脚本——for循环创建账户,测试主机连通性,for循环密码的修改】
  • 【Java面试题】一分钟了解反射机制
  • 切换python多版本
  • 中州养老项目:Mybatis自动填充拦截器
  • 机器学习项目从零到一:加州房价预测模型(PART 2)
  • 李宏毅深度学习教程 第6-7章 自注意力机制 + Transformer
  • NVIDIA GPU架构
  • 浅拷贝与深拷贝的区别
  • 断路器瞬时跳闸曲线数据获取方式
  • 关于Sort的补充
  • SpringBoot 02 AOP
  • 王者荣耀模拟器:一款基于Python的文本角色扮演游戏
  • 译| Netflix内容推荐模型的一些改进方向
  • 测试时扩散的深度研究助手
  • Redis实战(6)-- 慢查询运用与理解
  • 图像加密学习日志————论文学习DAY4
  • 档案馆可视化:历史宝库的数字新貌
  • 使用 MySQL Shell 进行 MySQL 单机到 InnoDB Cluster 的数据迁移实践
  • 【Django】-5- ORM的其他用法
  • RAWINPUT避坑指南(涉及GetRawInputData/GetRawInputBuffer)
  • 详解Python标准库之命令行界面库
  • .env 文件