暂无链接

B君的第二题

【问题描述】

申生在内而亡,重耳在外而安

考虑k+1k+1k + 1个数组a[i](0≤i≤k)a[i](0≤i≤k)a[i] (0 ≤ i ≤ k)。

为了方便起见,每个数组a[i]a[i]a[i]长度为nnn,下标从1" role="presentation" style="position: relative;">111开始。(直观来说就是第一维下标从000开始,第二维下标从1开始。)

其中a[i]" role="presentation" style="position: relative;">a[i]a[i]a[i]时时刻刻是a[i−1](1≤i≤k)a[i−1](1≤i≤k)a[i-1] (1 ≤ i ≤ k)的前缀和。

前缀和就是a[i][1]=a[i−1][1]a[i][1]=a[i−1][1]a[i][1] = a[i-1][1]且a[i][j]=a[i][j−1]+a[i−1][j](j≥2)a[i][j]=a[i][j−1]+a[i−1][j](j≥2)a[i][j] = a[i][j-1]+a[i-1][j] (j ≥ 2)。

比如a[0]=1,0,0,0a[0]=1,0,0,0a[0] = {1, 0, 0, 0},那么a[1]=1,1,1,1,a[2]=1,2,3,4,a[3]=1,3,6,10a[1]=1,1,1,1,a[2]=1,2,3,4,a[3]=1,3,6,10a[1] = {1, 1, 1, 1}, a[2] = {1, 2, 3, 4}, a[3]= {1, 3, 6, 10} 此时如果我们修改a[0][3]+=1a[0][3]+=1a[0][3] += 1,得到新的a[i]a[i]a[i]。

a[0]=1,0,1,0,a[1]=1,1,2,2,a[2]=1,2,4,6,a[3]=1,3,7,13a[0]=1,0,1,0,a[1]=1,1,2,2,a[2]=1,2,4,6,a[3]=1,3,7,13a[0] = {1, 0, 1, 0}, a[1] = {1, 1, 2, 2}, a[2] = {1, 2, 4, 6}, a[3] = {1, 3, 7, 13}。

你需要支持222个操作。

修改操作:输入x,y" role="presentation" style="position: relative;">x,yx,yx, y,执行a[0][x]+=ya[0][x]+=ya[0][x] += y。

询问操作:输入xxx,返回a[k][x]" role="presentation" style="position: relative;">a[k][x]a[k][x]a[k][x]的值。

由于结果可能很大,你只需要输出询问的值对100000000710000000071000000007取模的结果。

【输入格式】

第一行三个整数n,m,kn,m,kn, m, k,分别表示数组长度,操作次数,前缀和次数。

接下来mmm行,每行一个操作。

如果第一个数字是0" role="presentation" style="position: relative;">000,接下来会有222个数字x,y" role="presentation" style="position: relative;">x,yx,yx, y表示修改,a[0][x]+=ya[0][x]+=ya[0][x] += y。

如果第一个数字是111,接下来会有1" role="presentation" style="position: relative;">111个数字xxx表示询问a[k][x]" role="presentation" style="position: relative;">a[k][x]a[k][x]a[k][x]。

【输出格式】

对于每个询问操作,输出询问的值对100000000710000000071000000007取模的结果。

【输入样例】

4 11 3
0 1 1
0 3 1
1 1
1 2
1 3
1 4
0 3 1
1 1
1 2
1 3
1 4

【输出样例】

1
3
7
13
1
3
8
16

【数据范围】

对于100%100%100\%的数据,满足1≤n≤100000,1≤m≤100000,1≤k≤101≤n≤100000,1≤m≤100000,1≤k≤101 ≤ n ≤ 100000, 1 ≤ m ≤ 100000, 1 ≤ k ≤ 10。

对于100%100%100\%的数据,满足1≤x≤n,0≤y<10000000071≤x≤n,0≤y<10000000071 ≤ x ≤ n, 0 ≤ y 。

对于30%30%30\%的数据,满足1≤n,m≤10001≤n,m≤10001 ≤ n, m ≤ 1000。

对于另40%40%40\%的数据,满足1≤k≤21≤k≤21 ≤ k ≤ 2。

数据非常有梯度。

题解

感谢毕克不杀之恩。

终于有一道我不止会暴力的题,感觉能拿707070分,一个小时写完,跟暴力拍了几组大样例,感觉稳了啊,如果不是有个地方没取膜的话。。。

最后只有505050分,因为少取了一次膜,跪了202020分,跟暴力分+k=1k=1k=1得分一样,mmpmmpmmp。

虽然707070分很好得,但是要AAA掉这道题,还是需要一些骚操作,考虑求前缀和四次的式子:

∑i=1x∑j=1i∑k=1j∑p=1ka[0][p]" role="presentation" style="text-align: center; position: relative;">∑i=1x∑j=1i∑k=1j∑p=1ka[0][p]∑i=1x∑j=1i∑k=1j∑p=1ka[0][p]

\sum_{i=1}^x\sum_{j=1}^i\sum_{k=1}^j\sum_{p=1}^ka[0][p]

每当出现一个合法的i,j,k,pi,j,k,pi,j,k,p的组合,即满足1≤p≤k≤j≤i≤x1≤p≤k≤j≤i≤x1\le p\le k\le j\le i\le x时,a[0][p]a[0][p]a[0][p]就会被计算一次。不等式又可以表示为1<p+1<k+2<j+3<i+4<x+51<p+1<k+2<j+3<i+4<x+51

,那么一个合法的i,j,k,pi,j,k,pi,j,k,p组合就相当于在(p+1,x+5)(p+1,x+5)(p+1,x+5)中选择333个数,等于(x+3−p3)" role="presentation" style="position: relative;">(x+3−p3)(x+3−p3)\binom{x+3-p}{3},当我们枚举ppp时,就有下面的式子:

∑p=1x(x+3−p3)a[0][p]" role="presentation" style="text-align: center; position: relative;">∑p=1x(x+3−p3)a[0][p]∑p=1x(x+3−p3)a[0][p]

\sum_{p=1}^x\binom{x+3-p}{3}a[0][p]

推广到kkk次:

∑p=1x(x+k−1−pk−1)a[0][p]" role="presentation" style="text-align: center; position: relative;">∑p=1x(x+k−1−pk−1)a[0][p]∑p=1x(x+k−1−pk−1)a[0][p]

\sum_{p=1}^x\binom{x+k-1-p}{k-1}a[0][p]

目前为止,我们就得到了一个O(nm)O(nm)O(nm)的做法,还需要一波丧心病狂精妙绝伦的化简。

考虑公式如下:

(x+k−1−pk−1)=∑i=0k−1(xi)(k−1−pk−1−i)(x+k−1−pk−1)=∑i=0k−1(xi)(k−1−pk−1−i)

\binom{x+k-1-p}{k-1}=\sum_{i=0}^{k-1}\binom{x}{i}\binom{k-1-p}{k-1-i}

组合意义是讲x+k−1−px+k−1−px+k-1-p分为x,k−1−px,k−1−px,k-1-p两部分,再枚举从xxx那部分选出i" role="presentation" style="position: relative;">iii个数的方案,与从k−1−pk−1−pk-1-p个数中选k−1−ik−1−ik-1-i个数的方案相乘。

代入原式:

∑p=1x(x+k−1−pk−1)a[0][p]=∑p=1x∑i=0k−1(xi)(k−1−pk−1−i)a[0][p]∑p=1x(x+k−1−pk−1)a[0][p]=∑p=1x∑i=0k−1(xi)(k−1−pk−1−i)a[0][p]

\sum_{p=1}^x\binom{x+k-1-p}{k-1}a[0][p]=\sum_{p=1}^x\sum_{i=0}^{k-1}\binom{x}{i}\binom{k-1-p}{k-1-i}a[0][p]

此时∑k−1i=0(xi)∑i=0k−1(xi)\sum_{i=0}^{k-1}\binom{x}{i}已经跟ppp无关了,我们把枚举p" role="presentation" style="position: relative;">ppp的部分放到后面去:

∑i=0k−1(xi)[∑p=1x(k−1−pk−1−i)a[0][p]]∑i=0k−1(xi)[∑p=1x(k−1−pk−1−i)a[0][p]]

\sum_{i=0}^{k-1}\binom{x}{i}[\sum_{p=1}^{x}\binom{k-1-p}{k-1-i}a[0][p]]

后面方括号框住的部分是一个前缀和的形式,而k−1−ik−1−ik-1-i的取值只有kkk个,所以我们直接上k" role="presentation" style="position: relative;">kkk个数据结构维护就好了。

代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int M=8e5,mod=1e9+7;
int n,m,k,inv[M],base=1;
ll sum[18][M];
void in(){scanf("%d%d%d",&n,&m,&k);}
void build(){while(base<n)base<<=1;}
void add(int id,int x,int y){x+=base;for(;x;x>>=1)sum[id][x]=(sum[id][x]+y)%mod;}
int ask(int id,int ri)
{int le=base,ans=0;ri+=base+1;for(;le^ri^1;le>>=1,ri>>=1) {if(le&1^1)ans=(ans+sum[id][le+1])%mod;if(ri&1)ans=(ans+sum[id][ri-1])%mod;}return ans;
}
void ac()
{build();int op,x,y;ll ans,C;--k;inv[1]=1;for(int i=2;i<=n+n;++i)inv[i]=1ll*inv[mod%i]*(mod-mod/i)%mod;for(int i=1;i<=m;++i){scanf("%d%d",&op,&x);if(op){ans=0,C=1;for(int j=0;j<=k;++j)ans=(ans+C*ask(k-j,x))%mod,C=C*(x-j)%mod*inv[j+1]%mod;printf("%lld\n",ans);}else{scanf("%d",&y);C=1;for(int j=0;j<=k;++j){add(j,x,1ll*y*C%mod);C=C*(k-x-j)%mod*inv[j+1]%mod;if(C<0)C+=mod;}}}
}
int main(){in();ac();}

[2018.07.12 T2] B君的第二题相关推荐

  1. 网吧服务器全部进不了系统,2018.07.12某网吧因为服务器系统盘健康度导致全体卡死重启的故障分析处理过程...

    原标题:2018.07.12某网吧因为服务器系统盘健康度导致全体卡死重启的故障分析处理过程 导读: 天晚上20:54接到某网吧电话,说整个网吧大部分电脑自动重启了,而且进不去系统了.立即用电脑远程登录 ...

  2. 人大网院计算机在线考试答案,2018年12月计算机二级MSOffice操作题及参考答案

    [导语]2018年12月计算机二级考试在即,为了方便广大考生及时获取相关备考资料,下面无忧考网为您精心整理了,希望广大考生及时关注,更多计算机二级考试的相关资讯,请关注无忧考网计算机等级考试频道. 1 ...

  3. 这台计算机现在在博物馆吗英语翻译,2018年12月英语六级翻译真题及答案:博物馆...

    2018年12月英语六级翻译真题及答案:博物馆 2018-12-29 10:47:29 来源:华图教育 2018年12月英语六级翻译真题及答案:博物馆 2018年12月大学英语六级考试已经结束了,各位 ...

  4. 嵌入式 Linux 开发工具篇问题整理//C语言测试(杨辉三角、递归调用实现阶乘、计算器、统计字符串出现次数)//2018.07.12.//

    嵌入式 Linux 开发工具篇问题整理 1. 嵌入式开发与传统开发的区别?(同类问题:单片机开发与嵌入式开发的区别)             是否有无操作系统:     2. 移植操作系统的好处有哪些 ...

  5. 这台计算机现在在博物馆吗英语翻译,2018年12月英语六级翻译真题点评试卷二:博物馆(文都教育)...

    2018年12月大学英语六级翻译有关博物馆的考题一共包含8句话,接下来我们将从逻辑和词汇两个层面帮助大家解析. 一.逻辑层面 拿到题目后,广大考生首先要做的第一件事便是标序号,理大意."理大 ...

  6. 2018.07.12【2018提高组】模拟B组 【NOIP2015模拟10.27】魔法阵

    #Description 帕秋莉·诺蕾姬,有着"不动的大图书馆" 的称号,擅长使用各种各样的属性魔法. --<东方求闻史记> 一如既往地,帕秋莉在图书馆中研究着魔法.今 ...

  7. 2018.07.12【2018提高组】模拟B组 【NOIP2015模拟10.27】魔道研究

    #Description "我希望能使用更多的魔法.不对,是预定能使用啦.最终我要被大家称呼为大魔法使.为此我决定不惜一切努力." --<The Grimoire of Ma ...

  8. 2018年12月计算机一级试题答案,2018年12月计算机一级MSOffice冲刺题及答案(7)

    [1] 下列不是微机总线的是( ).[参考答案C] [A] 数据总线 [B] 地址总线 [C] 信息总线 [D] 控制总线 [2] 下列各进制数中最大的数是( ).[参考答案D] [A] 227O [ ...

  9. 2018年12月计算机二级C语言题库,2016年12月计算机二级《C语言》选择题题库

    2016年12月计算机二级<C语言>选择题题库 (1)设栈的存储空间为S(1:m),初始状态为top=m+1.经过一系列入栈与退栈操作后,top=1.现又要将一个元素进栈,栈顶指针t叩值变 ...

  10. 【跃迁之路】【522天】程序员高效学习方法论探索系列(实验阶段279-2018.07.12)...

    @(跃迁之路)专栏 [跃迁之路]奖励金计划正式开始 从2018.7.1起,[跃迁之路]奖励金计划正式起航,从今以后,每月1日,我会将自己个人上月收入的1%计入[跃迁之路]奖励金池,积累到足够金额后,将 ...

最新文章

  1. python元组类型的变量以及字符串类型的变量作为参数进行传值
  2. 数据挖掘算法学习(四)PCA算法
  3. python 协程池gevent.pool_进程池\线程池,协程,gevent
  4. 我们并没有觉得MapReduce速度慢,直到Spark出现
  5. 工控蜜罐Conpot部署和入门及高级演变
  6. 人脸识别最新进展——几篇相关论文总结
  7. ubuntu15.04在安装完vmware11后打开提示 VMware Kernel Module Updater
  8. 很久的东西-也有价值
  9. 安装签名不一致什么意思_探灵之夜嫁安装失败签名不一致怎么办-夜嫁安装失败签名不一致解决方法-松松手游网...
  10. 冒泡排序解析 + 代码实现(C语言)
  11. Python微信、QQ自动发消息
  12. 神舟刷蓝天w650dbios_神舟Z7-CT7NA刷入蓝天BIOS破除40W功耗墙
  13. 木疙瘩动画效果视频学习
  14. mysql 中的升序和降序
  15. 数学用计算机开方,开方(数学术语)_百度百科
  16. beyond compare 4 This license key has been revoked 出现的问题与解决办法
  17. shell 中#!/bin/sh 的意思
  18. QT使用tableWidget显示双排列表 并且选中用红框圈出来
  19. NOIP(CSP)初赛知识总结
  20. Kotlin读书笔记之函数式kotlin

热门文章

  1. wordpress.org 删除
  2. 多媒体计算机主机有哪些硬件,现在市场上多媒体电脑主要有哪些硬件部分组成?...
  3. java注释符_Java程序中的单行注释符是(  ),多行注释符是( )。
  4. altium 快速设置网络_通过加载CAD“快速选择”插件,可以很大的提高绘图效率...
  5. Maven报错Please ensure you are using JDK 1.4 or above and not a JRE解决方法!
  6. C#:String.Format数字格式化输出 {0:N2} {0:D2} {0:C2}...
  7. STL之Ranges区间讨论
  8. poj 2560 Freckles
  9. mybatis-plus 自定义QueryWrapper(一)实现查询函数
  10. equals和==比较