Aggregated Counting(找规律 + 预处理)
2024-08-26 07:54:41
Aggregated Counting
转 : https://blog.csdn.net/cq_phqg/article/details/48417111
题解:
可以令n=1+2+2+3+3+......+ i 这个序列的长度为p
那么a[n]=1*1+2*2+3*2+...... + p*i
那么不难发现a[a[n]] = 1*1 + (2+3)*2 + (4+5)*3 + (6+7+8)*4 + ... + (pre+1 + pre+2 + ... + pre+b[p] ) * p
b[p]为p在原序列中出现的次数
pre,b[p]这些值都可以预处理算出 每次询问可以O(1)算出答案
pre 是 第p-1项的pre + b[p-1]
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std; typedef long long ll;
const int MOD = (int)1e9+;
const int INF = (int)1e9;
const int MAXN = ;
int a[MAXN+];
int b[MAXN+];
int sum[MAXN+];
int dp[MAXN+];
int pre[MAXN+];
int sz,val; int add(int x,int y){
x+=y;
if(x>=MOD)x-=MOD;
return x;
} int po(int x,int n){
int ans=;
int temp=x;
while(n){
if(n&)ans=(ll)ans*temp%MOD;
temp=(ll)temp*temp%MOD;
n>>=;
}
return ans;
} int main()
{
val=po(,MOD-);
a[]=;
a[]=;
a[]=;
int sz=;
for(int i=;;i++){
int cnt=a[i];
while(cnt){
a[++sz]=i;
cnt--;
if(sz>=MAXN)break;
}
if(sz>=MAXN)break;
}
for(int i=;i<=MAXN;i++){
sum[i]=sum[i-]+a[i];
if(sum[i]>=INF)break;
} for(int i=;i<=MAXN;i++){
dp[i]=add(dp[i-],(ll)( add(add(add(pre[i-],),pre[i-]),a[i]) )*a[i]%MOD*i%MOD*val%MOD);
pre[i]=add(pre[i-],a[i]);
} int t;scanf("%d",&t);
while(t--){
int n;scanf("%d",&n);
int l=,r=MAXN;
int pos;
while(l<=r){
int mid=l+r>>;
if(n<=sum[mid]){
pos=mid;
r=mid-;
}
else l=mid+;
}
int x=n-sum[pos-];
int ans=add(dp[pos-],(ll)( add(add(add(pre[pos-],),pre[pos-]),x) )*x%MOD*pos%MOD*val%MOD);
printf("%d\n",ans);
}
return ;
}
最新文章
- js面试题之数组去重对比
- centos7.2 默认启动内核修改
- 在js中对时间类型格式化字符串
- 本地blast用法
- 菜鸟学习Struts——Scope属性
- git subtree有效管理公共第三方lib
- KAFKA分布式消息系统
- Windows 下如何设置 只允许固定IP远程访问
- fedora 23中配置nfs-server
- jQuery验证插件
- 如何用kaldi做孤立词识别-初版
- Android性能优化之启动速度优化
- 解决CentOS6.5下MySQL5.6无法远程连接的问题
- 在&#39;for&#39;循环中获取索引
- 获取node异步执行结果的方式
- 神经网络和误差逆传播算法(BP)
- JS nodeList转数组,兼容IE低版本
- DSO windowed optimization 代码 (2)
- Atitit 数据融合merge功能v3新特性.docx
- 使用Oozie中workflow的定时任务重跑hive数仓表的历史分期调度
热门文章
- LeetCode 762 Prime Number of Set Bits in Binary Representation 解题报告
- java 线程(六)死锁
- Nginx安装、配置虚拟主机、反向代理、负载均衡
- springMVC(二): @RequestBody @ResponseBody 注解实现分析
- Hibernate三种状态,缓存,以及update更新问题
- vuex 子组件传值
- freespace_evidence
- Android使得Fragment 切换时不重新实例化
- 异常Exception分类
- linux中 /dev/null命令