题干:

其中 zi 是第i次询问后的z。

解题报告:

因为有取log运算,所以分母的取值肯定不会超过30种,所以分每一个分母的时候,用前缀和优化一个和,最后求乘积就行了。(其实不需要快速幂,用快速幂也可以但是容易出错,因为需要判断如果已经大于1e9了就直接return到一个break的地方,但是wjh大佬强啊!!所以不怂、、)

另外这题要注意不能直接一个前缀和求出来之后向下取整,举个例子,1/3+1/3+1/3+1/3+1/3+1/3+1/3,正确答案应该是0,但是你这样直接分子前缀和求得的结果就是2,所以应该维护30个向下取整前缀和,就巧妙的优化了这个问题。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 5e5 + 5;
const ll mod = 1e9;
ll a[MAX],p[MAX];
ll all[MAX][31];
ll qsm(ll a,ll b,int &ff) {ll t=1;int fl=0;while(b) {if(b&1) {t*=a;if(t>mod||fl) {ff=1;break;}t%=mod;}a*=a;if(a>mod) fl=1;a%=mod;b>>=1;}return t;
}
int main() {int t;cin>>t;while(t--) {int n,m;scanf("%d%d",&n,&m);for(int i=1; i<=n; i++) {scanf("%lld",&a[i]);}sort(a+1,a+n+1);for(int j = 1; j<=30; j++) {for(int i=1; i<=n; i++) {all[i][j]=all[i-1][j]+a[i]/j;}}ll ans=0;for(ll i=1; i<=m; i++) {ll tmp=0;scanf("%lld",&p[i]);for(ll j=1; j<=n;) {int ff=0;ll tt=(ll)ceil(log(a[j]*1.0)*1.0/log(p[i]*1.0));//求出大分母 ll maxx=qsm(p[i],tt,ff);if(ff) {ll sum1=all[n][tt]-all[j-1][tt];tmp=(tmp+sum1)%mod;break;}int pos=upper_bound(a+1,a+n+1,maxx)-a - 1; //找到最后一个小于等于他的。 ll sum=all[pos][tt]-all[j-1][tt];tmp=(tmp+sum)%mod;j=pos+1;}ans=(ans+i*tmp)%mod;}printf("%lld\n",ans%mod);}return 0;
}

【ZOJ - 4029】Now Loading!!!(整除分块,思维,二分,前缀和)相关推荐

  1. 1041D - Glider(思维+二分+前缀和)

    https://codeforces.com/problemset/problem/1041/D 思路: 可以发现,选择的起点在当前某个线段区间的左端点一定不会更差. 于是On枚举起点位置,快速找到其 ...

  2. luogu P3455 [POI2007]ZAP-Queries (莫比乌斯反演 + 整除分块)

    整理的算法模板合集: ACM模板 题目传送门 本题中数据为5e4,我们只需要筛一次5e4就行了. 双倍经验的P4450 双亲数中数据达到了1e6,我们直接筛1e6的莫比乌斯函数有点不可取,因为只有一组 ...

  3. 2019长沙学院新生赛(A水,B水,C(整除分块),D水,E(巧数学),F(二分+bfs),H(换根dp),I(线段树)J(dp+倍增+lca))

    A-XOR SUM 通过简单观察得知连续四个数的异或值就是等于0,暴力找出左区间和右区间就可以了,最多跑四个单位 0^1^2^3==0   4^5^6^7=0 #include<bits/std ...

  4. SDOI2015 约数个数和(莫比乌斯反演经典、双上限整除分块)超详细笔记

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 AcWing 1358. 约数个数和(莫比乌斯反演经典.双上限整除分块) #include <c ...

  5. P3935 Calculating 整除分块

    传送门 文章目录 题意: 思路: 题意: 思路: 我们设s(x)=∑i=1nf(x)s(x)=\sum_{i=1}^nf(x)s(x)=∑i=1n​f(x),那么答案就是s(r)−s(l−1)s(r) ...

  6. P2261 [CQOI2007]余数求和 整除分块

    传送门 文章目录 题意: 思路: 题意: n,k≤1e9n,k\le1e9n,k≤1e9 思路: 考虑转换式子,∑i=1nkmodi=∑i=1n(k−⌊ki⌋∗i)=n∗k−∑i=1n⌊ki⌋∗i\s ...

  7. 【WC2014】时空穿梭【组合数】【莫比乌斯反演】【整除分块】【暴力多项式】

    题意:TTT 组数据,给一个 nnn 维空间,第 iii 维大小为 [1,mi]∩Z[1,m_i]\cap \Z[1,mi​]∩Z,求大小为 ccc 的严格偏序上升的共线点集个数.答案模 100071 ...

  8. 【NOI2016】循环之美【莫比乌斯反演】【整除分块】【杜教筛】【类杜教筛】

    传送门 题意:给定n,m,kn,m,kn,m,k,求1≤x≤n,1≤y≤m1\leq x\leq n,1\leq y\leq m1≤x≤n,1≤y≤m时xyx \over yyx​中数值不同的纯循环小 ...

  9. [CQOI2017] 小Q的表格(分块 + 整除分块 + 数学 + 前缀和)

    problem luogu-P3700 solution f(a,b)=f(b,a)f(a,b)=f(b,a)f(a,b)=f(b,a) 意味着我们只用考虑半个棋盘的信息. b∗f(a,a+b)=(a ...

  10. P3235-[HNOI2014]江南乐【整除分块,SG函数】

    正题 题目链接:https://www.luogu.com.cn/problem/P3235 题目大意 TTT组游戏,固定给出FFF.每组游戏有nnn个石头,每次操作的人可以选择一个数量不少于FFF的 ...

最新文章

  1. webpack配置alias别名设置
  2. 解决Intellij idea运行android application时找不到aapt/li...
  3. 我对孩子学习编程的一点思考
  4. 数字图像处理之空间域图像增强
  5. 2011目标 及 总结
  6. 线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期
  7. C/C++程序员应聘常见面试题深入剖析(1)
  8. linux 安装 yum
  9. 2021-05-26python 批量更改图片格式
  10. dis计算机领域中是什么意思,dis
  11. 人工智能、大数据、云计算概念
  12. sql打印每年入职人数_2015年3D打印基础知识-拥有16年全职经验的人
  13. JQuery实现复选框CheckBox的全选、反选、提交操作
  14. get这3种方式 轻松发送邮件超大附件
  15. pyqt实现图片轮播
  16. html5设计制作作品,16个精美的 HTML5 作品集网站设计案例
  17. SwiftUI中如何使用App Tracking Transparency Framework
  18. 关于Linux中的docker-compose.yml配置文件
  19. 高数习题第七章总练习题(上)
  20. 微信小程序头像用wx.getImageInfo获取失败

热门文章

  1. 图谱问答-理解query
  2. 【数据结构与算法】【算法思想】贪心算法
  3. 为什么火狐浏览器中点击按钮失效_各种浏览器审查、监听http头工具介绍
  4. mysql分布式一致性hash_分布式哈希一致性
  5. idea中连接mysql插入成功数据 在navicat中刷新表格没有数据_MySQL入门简记
  6. 用session实现html登录页面跳转页面跳转页面跳转,js判断登录与否并确定跳转页面的方法...
  7. mac删除android sd卡,如何从mac完全删除android及其所有文件?
  8. 初中位似图形作图_[如何画位似图形] 位似图形的画法及步骤
  9. python筛选法求素数讲解_埃氏筛选法求素数 Python
  10. webpaper网页出题语言