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 ;
}

最新文章

  1. js面试题之数组去重对比
  2. centos7.2 默认启动内核修改
  3. 在js中对时间类型格式化字符串
  4. 本地blast用法
  5. 菜鸟学习Struts——Scope属性
  6. git subtree有效管理公共第三方lib
  7. KAFKA分布式消息系统
  8. Windows 下如何设置 只允许固定IP远程访问
  9. fedora 23中配置nfs-server
  10. jQuery验证插件
  11. 如何用kaldi做孤立词识别-初版
  12. Android性能优化之启动速度优化
  13. 解决CentOS6.5下MySQL5.6无法远程连接的问题
  14. 在&#39;for&#39;循环中获取索引
  15. 获取node异步执行结果的方式
  16. 神经网络和误差逆传播算法(BP)
  17. JS nodeList转数组,兼容IE低版本
  18. DSO windowed optimization 代码 (2)
  19. Atitit 数据融合merge功能v3新特性.docx
  20. 使用Oozie中workflow的定时任务重跑hive数仓表的历史分期调度

热门文章

  1. LeetCode 762 Prime Number of Set Bits in Binary Representation 解题报告
  2. java 线程(六)死锁
  3. Nginx安装、配置虚拟主机、反向代理、负载均衡
  4. springMVC(二): @RequestBody @ResponseBody 注解实现分析
  5. Hibernate三种状态,缓存,以及update更新问题
  6. vuex 子组件传值
  7. freespace_evidence
  8. Android使得Fragment 切换时不重新实例化
  9. 异常Exception分类
  10. linux中 /dev/null命令