http://www.lydsy.com/JudgeOnline/problem.php?id=2752

https://www.luogu.org/problemnew/show/P2221#sub

Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站。
Y901高速公路是一条由N-1段路以及N个收费站组成的东西向的链,我们按照由西向东的顺序将收费站依次编号为1~N,从收费站i行驶到i+1(或从i+1行驶到i)需要收取Vi的费用。高速路刚建成时所有的路段都是免费的。
政府部门根据实际情况,会不定期地对连续路段的收费标准进行调整,根据政策涨价或降价。
无聊的小A同学总喜欢研究一些稀奇古怪的问题,他开车在这条高速路上行驶时想到了这样一个问题:对于给定的l,r(l<r),在第l个到第r个收费站里等概率随机取出两个不同的收费站a和b,那么从a行驶到b将期望花费多少费用呢?

洛谷给它定的标签是“概率期望”,实际上难在维护线段树。

首先我们把路费变成点费,那么n--,所有询问r--。

那么期望=(所有路段的钱的和)/(路段个数),路段个数很好求,专注维护前面的。

对于一个数v[i],它所提供的价值为:

(1+r-l-lr)*v[i]+(l+r)*i*v[i]-i*i*v[i]。

所以维护v[i],i*v[i],i*i*v[i]即可。

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<iostream>
  4. #include<vector>
  5. #include<cstring>
  6. #include<algorithm>
  7. #include<cctype>
  8. using namespace std;
  9. typedef long long ll;
  10. const int N=;
  11. inline int read(){
  12. int X=,w=;char ch=;
  13. while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
  14. while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
  15. return w?-X:X;
  16. }
  17. inline char getc(){
  18. char ch=getchar();
  19. while(ch<'A'||ch>'Z')ch=getchar();
  20. return ch;
  21. }
  22. inline ll sig(ll l,ll r){
  23. return (l+r)*(r-l+)>>;
  24. }
  25. inline ll ssig(ll l,ll r){
  26. ll a=(l-)*l*(*l-)/;
  27. ll b=r*(r+)*(*r+)/;
  28. return b-a;
  29. }
  30. ll tr[N][],lazy[N];
  31. void push(int a,int l,int r,int mid){
  32. if(!lazy[a])return;
  33. tr[a<<][]+=(mid-l+)*lazy[a];
  34. tr[a<<|][]+=(r-mid)*lazy[a];
  35. tr[a<<][]+=sig(l,mid)*lazy[a];
  36. tr[a<<|][]+=sig(mid+,r)*lazy[a];
  37. tr[a<<][]+=ssig(l,mid)*lazy[a];
  38. tr[a<<|][]+=ssig(mid+,r)*lazy[a];
  39. lazy[a<<]+=lazy[a];
  40. lazy[a<<|]+=lazy[a];
  41. lazy[a]=;
  42. }
  43. void modify(int a,ll l,ll r,ll l1,ll r1,ll v){
  44. if(r<l1||r1<l)return;
  45. if(l1<=l&&r<=r1){
  46. lazy[a]+=v;
  47. tr[a][]+=(r-l+)*v;
  48. tr[a][]+=sig(l,r)*v;
  49. tr[a][]+=ssig(l,r)*v;
  50. return;
  51. }
  52. ll mid=(l+r)>>;
  53. push(a,l,r,mid);
  54. modify(a<<,l,mid,l1,r1,v);modify(a<<|,mid+,r,l1,r1,v);
  55. tr[a][]=tr[a<<][]+tr[a<<|][];
  56. tr[a][]=tr[a<<][]+tr[a<<|][];
  57. tr[a][]=tr[a<<][]+tr[a<<|][];
  58. }
  59. ll query(int a,ll l,ll r,ll l1,ll r1){
  60. if(r<l1||r1<l)return ;
  61. if(l1<=l&&r<=r1){
  62. return (+r1-l1-l1*r1)*tr[a][]+(l1+r1)*tr[a][]-tr[a][];
  63. }
  64. ll mid=(l+r)>>;
  65. push(a,l,r,mid);
  66. return query(a<<,l,mid,l1,r1)+query(a<<|,mid+,r,l1,r1);
  67. }
  68. ll gcd(ll a,ll b){
  69. return (!b)?a:gcd(b,a%b);
  70. }
  71. int main(){
  72. int n=read()-,m=read();
  73. for(int i=;i<=m;i++){
  74. char ch=getc();
  75. int l=read(),r=read()-;
  76. if(ch=='C')modify(,,n,l,r,read());
  77. else{
  78. ll a=query(,,n,l,r),b=sig(,r-l+);
  79. ll g=gcd(a,b);
  80. printf("%lld/%lld\n",a/g,b/g);
  81. }
  82. }
  83. return ;
  84. }

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

BZOJ2752:[HAOI2012]高速公路——题解的更多相关文章

  1. BZOJ2752: [HAOI2012]高速公路(road)

    2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 608  Solved: 199[Submit][ ...

  2. 【线段树】BZOJ2752: [HAOI2012]高速公路(road)

    2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1621  Solved: 627[Submit] ...

  3. BZOJ2752: [HAOI2012]高速公路(road)(线段树 期望)

    Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1820  Solved: 736[Submit][Status][Discuss] Descripti ...

  4. [BZOJ2752][HAOI2012]高速公路

    BZOJ Luogu sol 看上去是道数学期望题但实际上是个傻逼数据结构 首先答案的形式应该就是 \[\frac{\mbox{[l,r]区间内的子区间权值之和}}{\mbox{[l,r]区间内的子区 ...

  5. 2019.01.14 bzoj2752: [HAOI2012]高速公路(线段树)

    传送门 线段树菜题. 题意简述:给一条nnn个点的链,链有边权,支持区间修改边权,查询在一段区间内随机选择不同的起点和终点路径的期望总边权和. 思路:考虑每条边的贡献. 考虑对于一段区间[l,r][l ...

  6. luogu P2221 [HAOI2012]高速公路题解

    题面 很套路的拆式子然后线段树上维护区间和的题.一般都是把式子拆成区间内几个形如\(\sum i*a_i, \sum i^2 * a_i\)的式子相加减的形式. 考虑一次询问[l,r]的答案怎么算: ...

  7. [bzoj2752]高速公路 题解(线段树)

    2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2102  Solved: 887[Submit] ...

  8. BZOJ 2752: [HAOI2012]高速公路(road)( 线段树 )

    对于询问[L, R], 我们直接考虑每个p(L≤p≤R)的贡献,可以得到 然后化简一下得到 这样就可以很方便地用线段树, 维护一个p, p*vp, p*(p+1)*vp就可以了 ----------- ...

  9. BZOJ 2752: [HAOI2012]高速公路(road) [线段树 期望]

    2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1219  Solved: 446[Submit] ...

随机推荐

  1. 数据库c3p0配置文件

    <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-con ...

  2. C# Builder

    如下: class Program { static void Main(string[] args) { ).BuildB(2.1).BuildUp(); Console.Read(); } } p ...

  3. CentOS 7.2安装11g Grid Infrastructure

      Preface       Oracle claimed that 11g RAC is supported on Redhat Linux 7 and above version,but the ...

  4. WEB安全--高级sql注入,爆错注入,布尔盲注,时间盲注

    1.爆错注入 什么情况想能使用报错注入------------页面返回连接错误信息 常用函数 updatexml()if...floorextractvalue updatexml(,concat() ...

  5. StreamReader和StreamWriter中文乱码问题

    StreamReader和StreamWriter中文乱码问题 1.写入: string  FilePath = @"E:\Measure.csv"; StreamWriter w ...

  6. Automatic Judge

    Description Welcome to HDU to take part in the second CCPC girls’ competition! A new automatic judge ...

  7. 学霸系统UI项目功能说明书 v1.0版本

    发布人员:软件工程实践小队. 发布内容:学霸系统UI项目说明书. 版本:学霸v1.0版本. 学霸系统UI项目说明书 v1.0版本分为以下部分: Part 1:用户须知: Part 2:功能实现: Pa ...

  8. c# dll问题

    问题描述: dll完全拷贝另一个程序,可是报缺少引用程序集之类的错误. 解决办法: 有可能是.net版本造成的错误.一般常见在3.5升到4之后,存在很多容差.

  9. Spring Boot(二)配置分析

    回顾一下采用SSM开发项目时,项目中会存在多个配置文件,比如web.xml,配置Spring相关的applicationContext-springmvc.xml, applicationContex ...

  10. 访问需要HTTP Basic Authentication认证的资源的各种开发语言的实现

    什么是HTTP Basic Authentication?直接看http://en.wikipedia.org/wiki/Basic_authentication_scheme吧. 在你访问一个需要H ...