题目链接

题意:给你n个数,按照顺序依次放入一个双端队列(可放在头部,也可以放在尾部),求xi > xi+1的期望 * 2^n mod (1e9 +7)

分析:期望*2^n=出现这种排法的概率*这种排法的desents数*2^n = 1/(2^(n-1)) * 2^n * 每一种排法每一个数的desents数=2* 每一种排法每一个数字的贡献值.

首先插入xi有两种方法,相当于有两种排法,那么求前缀时ans[i] = ans[i-1] * 2,然后再考虑当前xi的贡献值:如果放在头部,那么要求出满足xi>xj的xj的出现次数和,然后发现第一个数字出现1次,第二个2次,第三个4次,8,16...放在尾部同理,用树状数组累计次数和,至于i之后的数字如何排都不会对当前i做贡献,所以*.

#include <bits/stdc++.h>const int N = 1e5 + 5;
const int MOD = 1e9 + 7;template<class T>
void add(T &a, T b) {a += b;if (a >= MOD) {a -= MOD;}
}struct BIT {int c[N];int n;void init(int n) {this->n = n;std::fill (c, c+1+n, 0);}void updata(int p, int v) {for (int i=p; i<=n; i+=i&-i) {add (c[i], v);}}int query(int p) {int ret = 0;for (int i=p; i>0; i-=i&-i) {add (ret, c[i]);}return ret;}
};
BIT L, R;int a[N], cnt[N];int pow_mod(int x, int n) {int ret = 1;while (n) {if (n & 1) {ret = 1ll * ret * x % MOD;}x = 1ll * x * x % MOD; n >>= 1;}return ret;
}void pre_init() {cnt[1] = cnt[2] = 1;for (int i=3; i<=100000; ++i) {cnt[i] = 1ll * cnt[i-1] * 2 % MOD;}
}int main() {pre_init ();int T; scanf ("%d", &T);while (T--) {int n; scanf ("%d", &n);int nn = n + 3;L.init (nn); R.init (nn);for (int i=1; i<=n; ++i) {scanf ("%d", a+i);}long long ans = 0;for (int i=1; i<=n; ++i) {long long tmp = 0LL + L.query (a[i] - 1) + R.query (nn-a[i]-1);tmp = tmp * pow_mod (2, n - i) % MOD;add (ans, tmp);L.updata (a[i], cnt[i]);R.updata (nn - a[i], cnt[i]);}ans = ans * 2 % MOD;std::cout << ans << '\n';}return 0;
}

  

转载于:https://www.cnblogs.com/Running-Time/p/5387417.html

期望+DP ZOJ 3929 Deque and Balls相关推荐

  1. poj 2096 , zoj 3329 , hdu 4035 —— 期望DP

    题目:http://poj.org/problem?id=2096 题目好长...意思就是每次出现 x 和 y,问期望几次 x 集齐 n 种,y 集齐 s 种: 所以设 f[i][j] 表示已经有几种 ...

  2. luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现) Weblin ...

  3. [SCOI2008]奖励关(期望dp)

    你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃). 宝 ...

  4. 【bzoj4318】OSU! 期望dp

    题目描述 osu 是一款群众喜闻乐见的休闲软件.  我们可以把osu的规则简化与改编成以下的样子:  一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的0 ...

  5. 【loj6342】跳一跳 期望dp

    题目描述 一个人从 $1$ 开始向 $n$ 跳,在 $i$ 时会等概率跳到 $i,i+1,...,n$ 之一.求从 $1$ 跳到 $n$ 的期望步数. $n\le 10^7$ . 题解 期望dp傻逼题 ...

  6. 【高斯消元】兼 【期望dp】例题

    [总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $           ...

  7. Luogu P3251 [JLOI2012]时间流逝 期望dp

    题面 题面 题解 期望\(dp\)好题! 今年\(ZJOI\)有讲过这题... 首先因为\(T\)只有\(50\),大力\(dfs\)后发现,可能的状态数最多只有\(20w\)左右,所以我们就可以大力 ...

  8. 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra

    题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...

  9. 【BZOJ】1076 [SCOI2008]奖励关 期望DP+状压DP

    [题意]n种宝物,k关游戏,每关游戏给出一种宝物,可捡可不捡.每种宝物有一个价值(有负数).每个宝物有前提宝物列表,必须在前面的关卡取得列表宝物才能捡起这个宝物,求期望收益.k<=100,n&l ...

最新文章

  1. python中处理日期和时间的标准模块是-Python time模块参考手册
  2. 02 - Unit010:关联映射
  3. colab如何通过<>来直接加入相对应的代码段呢?模块化代码操作,真好
  4. Fiori 出试(WEBIDE平台)day1
  5. linux源码安装php缺少动态库,php源代码安装常见错误解决办法
  6. STM32之独立看门狗例程
  7. 2020-python小工能
  8. The file contains a character that cannot be represented in the current code pag
  9. PAT 甲级 1004
  10. 193.有效电话号码
  11. ActiveMQ(一)——JMS、应用场景、关键对象、demo
  12. Lingo 的基本使用入门
  13. html快闪软件制作,抖音最强快闪ppt怎么做?快闪PPT快闪制作方法介绍
  14. revit插件有哪些常用的?介绍几个常用的revit插件操作简单
  15. 信鸽推送接收通知点击打开相应Activity
  16. MyBatis框架学习笔记01:初入MyBatis(一)
  17. 仙人掌圆方树学习笔记
  18. iPhone内存管理详细解说(二)
  19. 拒酒词、与领导喝酒的诀窍、酒量不行的技巧
  20. 【漏洞复现-Tomacat-文件上传】vulfocus/tomcat-cve_2017_12615

热门文章

  1. 图方法:二分无向图的联通子图查找
  2. SLAM: Ubuntu14.04_Kylin安装ROS-Indigo
  3. 第一次使用Linux服务器所栽之坑
  4. 覃超:从湘西到Facebook,硅谷只是技术人生的一小站
  5. 做网页前端遇到的一些问题
  6. 为什么每个请求都要有用户名密码呢,那不是每次都要查询一下了,token,表示这个用户已经验证通过了,在token有效期内,只需要判断token是否有效就可以了...
  7. lagrange插值(完成)
  8. No plugin found for prefix ‘compile‘ in the current project
  9. scipy实现的共轭梯度法以及相关原理图解
  10. 使用python根据端口号关闭进程