【二分】【预处理】zoj4029 Now Loading!!!
题意:给定一个序列,多次询问
将a数组从小到大排序,下面那个值只有不超过32种,于是预处理f[i][j],表示分母为i时,aj/i的前缀和是多少。
然后对于一个给定的p,一定将分母划分成了一些连续的段落,通过枚举这些分母,二分获得分母变化的位置,将区间和累计进答案。
注意,对于给定的p,一个分母控制的某段区间是a的元素属于p^i+1到p^(i+1)的这段。
复杂度log^2n。
#include<cstdio>
//#include<cmath>
#include<algorithm>
using namespace std;
int f,cc;
void R(int &x){
cc=0;f=1;
for(;cc<'0'||cc>'9';cc=getchar())if(cc=='-')f=-1;
for(x=0;cc>='0'&&cc<='9';cc=getchar())(x*=10)+=(cc-'0');
x*=f;
}
#define MOD 1000000000
typedef long long ll;
int T,n,m,a[35][500005];
ll c[500005];
//int poses[100005][35];
//double Log(const int &p,const int &x){
// return log((double)x)/log((double)p);
//}
int main(){
R(T);
for(;T;--T){
R(n); R(m);
for(int i=1;i<=n;++i){
R(a[1][i]);
}
sort(a[1]+1,a[1]+n+1);
for(int i=1;i<=n;++i){
c[i]=(ll)a[1][i];
}
for(int i=1;i<=n;++i){
for(int j=2;j<=32;++j){
a[j][i]=a[1][i]/j;
}
}
for(int i=1;i<=32;++i){
for(int j=1;j<=n;++j){
a[i][j]=(a[i][j]+a[i][j-1])%MOD;
}
}
// for(int p=2;p*p<=MOD;++p){
// for(int i=1;i<=32;++i){
// if((int)(ceil(Log(p,c[n]))+0.5)<i){
// poses[p][i]=n+1;
// continue;
// }
// int l=1,r=n;
// while(l<r){
// int mid=(l+r>>1);
// if((int)(ceil(Log(p,c[mid]))+0.5)>=i){
// r=mid;
// }
// else{
// l=mid+1;
// }
// }
// poses[p][i]=l;
// }
// }
int p;
ll ans=0;
int popo[35];
for(int zu=1;zu<=m;++zu){
R(p);
// if((ll)p*(ll)p<=(ll)MOD){
// for(int i=1;i<32;++i){
// if(poses[p][i]>n){
// break;
// }
// ans=(ans+((ll)zu*(ll)((a[i][poses[p][i+1]-1]-a[i][poses[p][i]-1]+MOD)%MOD))%(ll)MOD)%(ll)MOD;
// }
// }
// else{
ll pp=1;
for(int i=1;i<32;++i){
ll* be=upper_bound(c+1,c+n+1,pp);
if(be-c>n){
break;
}
pp*=(ll)p;
ans=(ans+((ll)zu*(ll)((a[i][upper_bound(c+1,c+n+1,pp)-c-1]-a[i][be-c-1]+MOD)%MOD))%(ll)MOD)%(ll)MOD;
}
// }
}
printf("%lld\n",ans);
}
return 0;
}
【二分】【预处理】zoj4029 Now Loading!!!的更多相关文章
- NOIP2015聪明的质检员[二分 | 预处理]
背景 NOIP2011 day2 第二题 描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿 ...
- Codeforces Round #321 (Div. 2) B 二分+预处理
B. Kefa and Company time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- HDU 6274 二分+预处理(CCPC K题
#include"bits/stdc++.h" #define db double #define ll long long #define vec vector<ll> ...
- [luoguP3092] [USACO13NOV]没有找零No Change(状压DP + 二分)
传送门 先通过二分预处理出来,每个硬币在每个商品处最多能往后买多少个商品 直接状压DP即可 f[i]就为,所有比状态i少一个硬币j的状态所能达到的最远距离,在加上硬币j在当前位置所能达到的距离,所有的 ...
- EC R 86 D Multiple Testcases 构造 贪心 二分
LINK:Multiple Testcases 得到很多种做法.其中O(n)的做法值得一提. 容易想到二分答案 check的时候发现不太清楚分配的策略. 需要先考虑如何分配 容易发现大的东西会对小的产 ...
- 「Poetize3」Heaven Cow与God Bull
描述 Description 给定一个整数n,求一个整数m,满足m<=n,并且m/phi(m)的值最大.注:phi(m)代表m的欧拉函数,即不大于m且与m互质的数的个数. 题解:m/phi(m) ...
- D. 实验室传染病
D. 实验室传染病 题意 给出 n 个人的位置,以及每个人的传染范围,当一个人患病时,他的传染范围内(包括边界上)的人全部会被感染并继续向外传播. 求以每个人为传染源最多有多少人被感染. 分析 首先二 ...
- 【倍增】Tak and Hotels II @ABC044&ARC060/upcexam6463
6463: Tak and Hotels II 时间限制: 1 Sec 内存限制: 128 MB 题目描述 N hotels are located on a straight line. The ...
- CF #442 div2
A 判断下5个名字出现了几次.pre数据巨弱,就这么一水题在std测刷掉了非常多的人.. /** @Date : 2017-10-24 16:04:41 * @FileName: A.cpp * @P ...
随机推荐
- python作业堡垒机(第十三周)
作业需求: 1. 所有的用户操作日志要保留在数据库中 2. 每个用户登录堡垒机后,只需要选择具体要访问的设置,就连接上了,不需要再输入目标机器的访问密码 3. 允许用户对不同的目标设备有不同的访问权限 ...
- python装饰器三种装饰模式的简单理解
学设计模式中有个装饰模式,用java实现起来不是很难,但是远远没有python简单,难怪越来越火了! 这里就简单讨论下python的几种装饰模式: 一 无参装饰器: # 装饰器 import time ...
- css给表格每一列设置不同的样式
第一列#id table tr td:first-child{ overflow: visible; }第二列table tr td:first-child+td{color:#666;}第三列tab ...
- 使用dork脚本来查询Google
使用dork脚本来查询Google 了解Google Hacking数据库的第一步是了解所有典型的Google运算,就像机器级编程工程师必须了解计算机操作代码一样. 这些Google运算是Google ...
- 使用Python扫描网络MAC地址对应的IP地址
#!/usr/bin/env python # -*- coding: utf-8 -*- from scapy.all import srp,Ether,ARP,conf ipscan='192.1 ...
- git summary
Git 使用经验 缘起 一直想写一篇博文,记录我在使用git时遇到的问题以及解决办法.由于项目忙,偶尔的记录不连续,不成系统.今天有时间记录下来,方便自己以后查看. git 简介及其优势 简单来说,g ...
- Unity教程之-Unity3d中针对Android Apk的签名验证(C#实现)
当Unity开发的游戏以Android Apk的形式发布之后,经常会遇到的一种情况就是别人对我们的游戏进行二次打包,也就是用他们的签名替换掉我们的签名,从而堂而皇之的将胜利果实占为己有.面对这样的情况 ...
- nodejs 接收上传的图片
1.nodejs接收上传的图片主要是使用formidable模块,服务器是使用的express搭建. 引入formidable var formidable = require('./node_mod ...
- Oracle 中count(1) 、count(*) 和count(列名) 函数的区别
1)count(1)与count(*)比较: 1.如果你的数据表没有主键,那么count(1)比count(*)快2.如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快3. ...
- Luogu P2069 【松鼠吃果子】
推荐一波数组模拟链表的讲解 这道题呢,数组写的话不好删除(因为后面要接过来),自然想到链表 对于一个果子,我们可以维护其前驱和后继,我们不妨记与一个点相邻的上面的点为其前驱,下面的点为其后继 观察到题 ...