Description

在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度,
现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒,
显然,他能为长者所续的时间,为这三个维度上能量的乘积,
但目前的宇宙很不乐观,胡乱偷取可能造成维度的崩溃,
所以,他必须按逆序偷取这些维度,且在偷取中,
每次偷取的维度的能量必须严格小于他上次偷取的能量,
由于膜法师生活在多元宇宙,所以他可以让所有可能的偷取方案全部发生
 
但他数学不好,所以找到了你帮他求出能为长者续几秒,
你要做的,就是在给定的维度序列a中,
求出所有满足i<j<k且ai<aj<ak的ai*aj*ak的和
即 ∑ (a_i*a_j*a_k),要求  i<j<k  且 a_i<a_j<a_k

Input

第一行1个数 n
第二行n个数 a_i

Output

一个数,表示能为长者续几秒,由于长者是不朽的,
所以能活很久,不妨将答案对**19260817**取模吧

Sample Input1

4
1 2 3 4

Sample Output1

50

Sample Input2

10
6 8 4 1 3 0 7 5 9 2

Sample Output2

1737

HINT

样例解释
对于样例 1
有满足条件的序列为
{1,2,3}——6
{1,2,4}——8
{1,3,4}——12
{2,3,4}——24
ans=6+8+12+24=50
数据范围
30%的数据n<=300
60%的数据n<=3000
100%的数据n<=300000
0<=a[i]<=2147483647

题解

我们枚举$j$很显然答案就是

$$\sum _{j=1} ^n (a[j]*{\sum _{i=1} ^{j-1} a[i]}*{\sum _{k=j+1} ^{n} a[k]})$$

树状数组+离散乱搞就可以了。

emmmmmm(恶膜某民命秒没)~

  1. //It is made by Awson on 2017.10.3
  2. #include <set>
  3. #include <map>
  4. #include <cmath>
  5. #include <ctime>
  6. #include <queue>
  7. #include <stack>
  8. #include <vector>
  9. #include <cstdio>
  10. #include <string>
  11. #include <cstring>
  12. #include <cstdlib>
  13. #include <iostream>
  14. #include <algorithm>
  15. #define LL long long
  16. #define Max(a, b) ((a) > (b) ? (a) : (b))
  17. #define Min(a, b) ((a) < (b) ? (a) : (b))
  18. #define sqr(x) ((x)*(x))
  19. #define lowbit(x) ((x)&(-(x)))
  20. #define count COUNT
  21. using namespace std;
  22. const int N = ;
  23. const LL MOD = ;
  24. void read(LL &x) {
  25. char ch; bool flag = ;
  26. for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || ); ch = getchar());
  27. for (x = ; isdigit(ch); x = (x<<)+(x<<)+ch-, ch = getchar());
  28. x *= -*flag;
  29. }
  30.  
  31. int n;
  32. struct tt {
  33. LL val;
  34. int pos, rank;
  35. }a[N+];
  36. LL sum[N+], c[N+], ans;
  37. bool comp(const tt &a, const tt &b) {
  38. return a.val < b.val;
  39. }
  40. bool accomp(const tt &a, const tt &b) {
  41. return a.pos < b.pos;
  42. }
  43.  
  44. void add(int x, LL key) {
  45. for (; x <= n; x += lowbit(x)) c[x] = (c[x]+key)%MOD;
  46. }
  47. LL count(int x) {
  48. LL cnt = ;
  49. for (; x; x -= lowbit(x)) cnt = (cnt+c[x])%MOD;
  50. return cnt;
  51. }
  52. void work() {
  53. scanf("%d", &n);
  54. for (int i = ; i <= n; i++) {
  55. read(a[i].val); a[i].pos = i;
  56. }
  57. sort(a+, a+n+, comp);
  58. a[].rank = ;
  59. for (int i = ; i <= n; i++)
  60. a[i].rank = a[i-].rank+(a[i].val != a[i-].val);
  61. sort(a+, a+n+, accomp);
  62. for (int i = ; i <= n; i++) {
  63. sum[i] = count(a[i].rank-);
  64. add(a[i].rank, a[i].val);
  65. }
  66. memset(c, , sizeof(c));
  67. LL cnt = ;
  68. for (int i = n; i >= ; i--) {
  69. LL tmp = count(a[i].rank);
  70. tmp = (cnt+MOD-tmp)%MOD;
  71. ans = (ans+sum[i]*tmp%MOD*a[i].val)%MOD;
  72. add(a[i].rank, a[i].val);
  73. cnt = (cnt+a[i].val)%MOD;
  74. }
  75. printf("%lld\n", ans);
  76. }
  77. int main() {
  78. work();
  79. return ;
  80. }

[BZOJ 5055]膜法师的更多相关文章

  1. bzoj 5055: 膜法师 -- 树状数组

    5055: 膜法师 Time Limit: 10 Sec  Memory Limit: 128 MB Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇 ...

  2. bzoj 5055: 膜法师——树状数组

    Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然,他能为长者所续的时间,为这三个维度上能量的乘 ...

  3. bzoj 5055: 膜法师 树状数组+离散

    先枚举每一个数,看它前面有几个比它小,算一下和为sum1,后面有几个比它大,算一下和为sum2,对答案的贡献为A[i]*sum1*sum2. 离散化后,树状数组就可以了. 就是倒着一边,顺着一边,统计 ...

  4. bzoj5055 膜法师

    Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然,他能为长者所续的时间,为这三个维度上能量的乘 ...

  5. BZOJ_5055_膜法师_树状数组+离散化

    BZOJ_5055_膜法师_树状数组+离散化 Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然 ...

  6. JZOJ.5280【NOIP2017模拟8.15】膜法师

    Description

  7. 【BZOJ5055】膜法师 树状数组

    [BZOJ5055]膜法师 Description 题目描述 在给定的维度序列a中, 求出所有满足i<j<k且ai<aj<ak的ai*aj*ak的和 即 ∑ (a_i*a_j* ...

  8. [JZOJ5280]膜法师题解--思维+前缀和

    [JZOJ5280]膜法师题解--思维+前缀和 题目链接 暴 力 过 于

  9. 【bzoj5055】膜法师(离散化+树状数组)

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=5055 这道题……不得不说,从标题到题面都能看出一股浓浓的膜法气息……苟…… 题意就是统计顺序 ...

随机推荐

  1. hackme.inndy.tw - pyyy - Writeup

    hackme.inndy.tw - pyyy - Writeup 0x01 反编译 1.第一次尝试的时候我直接在线反编译,部分结果如下. for (i, f) in enumerate(F): n = ...

  2. C语言程序设计第四次作业——选择结构(2)

    Deadline: 2017-11-5 22:00 一.学习要点 掌握switch语句 掌握字符常量.字符串常量和字符变量 掌握字符型数据的输入输出 二.实验内容 完成PTA中选择结构(2)的所有题目 ...

  3. android context获取目录详解

    获取 sqlite系统数据库路径 方式1: ApkInfo apkInfo = new ResourceUtil(context).getApkInfo(); APP_PATH = new Strin ...

  4. Swift 2.2 的新特性

    导读:本文来自SwiftGG翻译组,作者@walkingway基于苹果Swift官方博客中Ted Kremenek所撰写的"Swift 2.2 Released!"文章进行了关于S ...

  5. 【nodejs】安装browser-sync 遇到错误提示

    首先我用的是mac电脑在我执行安装browser-sync时遇到如下问题: 因为不被允许所以我只能不安装全局了: 但是又出现了如下的新问题 纠结了半个小时,终于知道为什么会出现这个问题了, node只 ...

  6. 从PRISM开始学WPF(六)MVVM(三)事件聚合器EventAggregator?

    从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...

  7. 接触JS的变量

    刚刚接触到js,写的代码都是很简单的,制单的概念也相当少,新学习的就是变量.let和const以及js的数据类型. 变量的内容有五个,我就不一一介绍了,重点在于: 在 JavaScript 中,使用变 ...

  8. EasyUI中Tabs添加远程数据的方法。

    tabs加载远程数据: $(function () { $("#btnquery").click(function () { if (!$("#tcontent" ...

  9. nat和napt技术

    私网IP地址是指内部网络或主机的IP地址,公网IP地址是指在因特网上全球唯一的IP地址. RFC 1918为私有网络预留出了三个IP地址块,如下: A类:10.0.0.0-10.255.255.255 ...

  10. redux的使用过程

    1.redux是react的状态管理工具,可以用来存放公共数据,因此也可用来作为组件间参数传递的方法.   2.组件传参,需要有一个公共的父组件.在父组件中引入Provider.通过Provider将 ...