有n个数,给定一个k,求所有长度大于等于k的区间中前k大数的总和。这样就比较简单相信大家都会,所以此题要求当k=1~n的总和,即求

∑nk=1∑n−k+1i=1∑nj=i+k−1  区间前K大和

Input
  1. 输入五个数n,a1,A,B,Ca1表示第一个数,A,B,C用来生成其余n-1个数。a(i)=(a(i-1)*A+B)mod C1<=n<=1,000,000,0<=a1,A,B,C<=1,000,000,000
Output
  1. 一个数表示答案,最后答案对1,000,000,007取模。
Input示例
  1. 3 3 1 1 10
Output示例63样例解释:
  1. 三个数为3,4,5
  2. K=1:[1,1]=3,[1,2]=[2,2]=4,[1,3]=[2,3]=[3,3]=5(表示各个区间在k=1时的答案)
  3. K=2:[1,2]=7,[2,3]=[1,3]=9
  4. K=3:[1,3]=12

    题目大意:sigma(k=1--n) f(k),k为区间大于等于k的前k大的和。
  5. 题解:树状数组
    对于区间[l,r],假设它的答案为ans,如果新增一个数a[r+1],那么它
    出现的次数就是[l,r]中小于它的数的个数。如果Ai<Aj,i<j,那么包含这两个数
    的区间的个数为i*(n-j+1),则对答案的贡献为Aj*(n-j+1),对于Aj>Ai,i>j,
    倒过来再处理一遍。注意:双关键字排序
  6. 代码:
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #define mod 1000000007
  6. #define maxn 1000009
  7. #define LL long long
  8. using namespace std;
  9.  
  10. LL n,ans,A,B,C,a[maxn],tree[maxn];
  11. typedef pair<LL,int> PII;
  12. PII b[maxn];
  13.  
  14. void add(int x,int p){
  15. for(;x<=n;x+=x&(-x))tree[x]=(tree[x]+p)%mod;
  16. }
  17.  
  18. LL getsum(int x){
  19. LL all=;
  20. for(;x;x-=x&(-x))all=(all+tree[x])%mod;
  21. return all;
  22. }
  23.  
  24. int main(){
  25. scanf("%lld%lld%lld%lld%lld",&n,&a[],&A,&B,&C);
  26. b[].first=a[];b[].second=;
  27. for(int i=;i<=n;i++){
  28. a[i]=(a[i-]*A+B)%C;
  29. b[i].first=a[i];b[i].second=i;
  30. }
  31. sort(b+,b+n+);
  32. for(int i=;i<=n;i++)
  33. a[i]=lower_bound(b+,b+n+,make_pair(a[i],i))-b;
  34. for(int i=;i<=n;i++){
  35. add(a[i],i);
  36. LL tmp=b[a[i]].first*1LL*(n-i+)%mod;
  37. LL amp=getsum(a[i]);
  38. ans=(ans%mod+tmp*amp%mod)%mod;
  39. }
  40. memset(tree,,sizeof(tree));
  41. for(int i=n;i>=;i--){
  42. LL tmp=(b[a[i]].first*1LL*i)%mod;
  43. LL amp=getsum(a[i]);
  44. ans=(ans%mod+tmp*amp%mod)%mod;
  45. add(a[i],n-i+);
  46. }
  47. printf("%lld\n",ans);
  48. return ;
  49. }
  1.  

51nod1680 区间求和的更多相关文章

  1. POJ 2823 Sliding Window 线段树区间求和问题

    题目链接 线段树区间求和问题,维护一个最大值一个最小值即可,线段树要用C++交才能过. 注意这道题不是求三个数的最大值最小值,是求k个的. 本题数据量较大,不能用N建树,用n建树. 还有一种做法是单调 ...

  2. POJ 3468 A Simple Problem with Integers(线段树 成段增减+区间求和)

    A Simple Problem with Integers [题目链接]A Simple Problem with Integers [题目类型]线段树 成段增减+区间求和 &题解: 线段树 ...

  3. vijos1740 聪明的质监员 (二分、区间求和)

    http://www.rqnoj.cn/problem/657 https://www.vijos.org/p/1740 P1740聪明的质检员 请登录后递交 标签:NOIP提高组2011[显示标签] ...

  4. LightOJ 1112 Curious Robin Hood (单点更新+区间求和)

    http://lightoj.com/volume_showproblem.php?problem=1112 题目大意: 1 i        将第i个数值输出,并将第i个值清0 2 i v     ...

  5. POJ 3468 A Simple Problem with Integers(线段树区间求和)

    Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...

  6. poj3468 A Simple Problem with Integers(线段树模板 功能:区间增减,区间求和)

    转载请注明出处:http://blog.csdn.net/u012860063 Description You have N integers, A1, A2, ... , AN. You need ...

  7. poj3468树状数组的区间更新,区间求和

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 47174   ...

  8. D 区间求和 [数学 树状数组]

    D 区间求和 题意:求 \[ \sum_{k=1}^n \sum_{l=1}^{n-k+1} \sum_{r=l+k-1}^n 区间前k大值和 \] 比赛时因为被B卡了没有深入想这道题 结果B没做出来 ...

  9. [用CDQ分治解决区间加&区间求和]【习作】

    [前言] 作为一个什么数据结构都不会只会CDQ分治和分块的蒟蒻,面对区间加&区间求和这么难的问题,怎么可能会写线段树呢 于是,用CDQ分治解决区间加&区间求和这篇习作应运而生 [Par ...

随机推荐

  1. php异常处理类

    <?php header('content-type:text/html;charset=UTF-8'); // 创建email异常处理类 class emailException extend ...

  2. cocos打包出现错误,执行命令出错,返回值:2。 Traceback (most recent call last): File "E:\cocos_workspace\MyGameOne\proj.android\build_native.py", line 43, in <module> build(opts.build_mode) File "E:\cocos_workspace\MyGa

    先看看NDK的版本,如果不行,就删除\proj.android\obj\local\armeabi下的文件.

  3. 【HackerRank】Closest Numbers

    Sorting is often useful as the first step in many different tasks. The most common task is to make f ...

  4. 登陆weblogic后页面控制台卡主

    输入http://localhost:7001/console进入控制页面,能登陆进去,但是登陆进去后页面就马上卡死,可以看到页面头部,其余都显示不出来. 重启后启动访问,能够正常进入,关闭weblo ...

  5. GIT截图

    GIT截图 今天首次成功用了GIT上传了JAVA代码,感觉一下次就能上传这么多代码,确实比在网页上方便.自己一开始根本摸不着头脑,不知道怎样使用GIT软件,但在学姐博客的指导下,在同学热情且耐心地指导 ...

  6. Java 封装、继承、多态

    Java中使用 extends 关键字 进行父类继承 在初始化子类时,子类会自动执行父类的构造方法, 如果子类的构造方法中没有显示调用父类的构造方法, 则系统会默认调用父类无参的构造方法 super( ...

  7. JMeter学习(八)JDBC Request

    [step_1]:“测试计划”--(右键)à添加à线程组: [step_2]:选择step_1中添加的线程组—(右键)à添加à配置元件àJDBC Connection Configuration,添加 ...

  8. MySQL锁机制和PHP锁机制

    模拟准备--如何模拟高并发访问一个脚本:apache安装文件的bin/ab.exe可以模拟并发量 -c 模拟多少并发量 -n 一共请求多少次 http://请求的脚本例如:cmd: apache安装路 ...

  9. sql server 2005 Express 下载

    简体中文版: SQL Server 2005 Express Edition 简体中文版 链接页面: http://www.microsoft.com/downloads/details.aspx?d ...

  10. Mac键盘图标与对应快捷按键标志汇总 分类

    Mac键盘图标与对应快捷按键 ⌘——Command () win键 ⌃ ——Control ctrl键 ⌥——Option (alt) ⇧——Shift ⇪——Caps Lock fn——功能键就是 ...