有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. iOS URL Loading System / HTTP 重定向 认识与学习

    一个朋友问了我一个问题,需求是这样的:他要用本地的H5资源 替换 链接资源,  但是判断链接资源时候 因为一些操作请求本地化了之后  一些操作比如请求服务器使用的是http开头,然而本地资源一直是以f ...

  2. VMware安装Centos7过程

    VMware安装Centos7过程 1.打开VMwear选择新建虚拟机 2.典型安装与自定义安装 典型安装:VMwear会将主流的配置应用在虚拟机的操作系统上,对于新手来很友好. 自定义安装:自定义安 ...

  3. 快乐学习 Ionic Framework+PhoneGap 手册1-5 {IO开关}

    当然,即使努力了也没做成,至少你也有收获,因为你知道自己以后可以避开这个坑. 这是一个"IO"开关,请看效果图和代码,下一节,说明,数据交换 Index HTML Code < ...

  4. RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 是什么意思?

    <IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENA ...

  5. C语言一个细节地方的说明【防止使用不当而出错】

    1.运行如下的代码: #include <stdio.h> #include <string.h> int main() { int a; a=1; int s[4]; mem ...

  6. 【P2052】道路修建(树形+搜索)

    这个题看上去高大上,实际上就是一个大水题.怎么说呢,这个题思路可能比较难搞,代码实现难度几乎为0. 首先我们可以发现这是一棵树,然后问其中任意一条边左右两边的点的数量之差的绝对值,实际上,无论两边的点 ...

  7. EntityFramework 学习 一 Multiple Diagrams in Entity Framework 5.0

    Visual Studio 2012 provides a facility to split the design time visual representation of the Entity ...

  8. web应用路径问题(相对路径,绝对路径,动态获取路径)

    1.相对路径和绝对路径 绝对路径:以 “ / ” 开头的路径,是完整的路径. 相对路径:不以 “ / ” 开头的路径,是相对于当前web资源目录的路径. 在绝对路径中, “ / ” 的含义有两种解释: ...

  9. java基础9(IO流)-File类

    File类 File:文件和目录路径名的抽象表示形式.即java中把文件或者目录都封装成File对象 代码练习1 import java.io.File; public class FileDemo1 ...

  10. spring boot 基础学习

    构建微服务:Spring boot 入门篇 http://www.cnblogs.com/ityouknow/p/5662753.html SpringBoot入门系列:第一篇 Hello World ...