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]即可。

#include<cstdio>
#include<cmath>
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#include<cctype>
using namespace std;
typedef long long ll;
const int N=;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
inline char getc(){
char ch=getchar();
while(ch<'A'||ch>'Z')ch=getchar();
return ch;
}
inline ll sig(ll l,ll r){
return (l+r)*(r-l+)>>;
}
inline ll ssig(ll l,ll r){
ll a=(l-)*l*(*l-)/;
ll b=r*(r+)*(*r+)/;
return b-a;
}
ll tr[N][],lazy[N];
void push(int a,int l,int r,int mid){
if(!lazy[a])return;
tr[a<<][]+=(mid-l+)*lazy[a];
tr[a<<|][]+=(r-mid)*lazy[a];
tr[a<<][]+=sig(l,mid)*lazy[a];
tr[a<<|][]+=sig(mid+,r)*lazy[a];
tr[a<<][]+=ssig(l,mid)*lazy[a];
tr[a<<|][]+=ssig(mid+,r)*lazy[a];
lazy[a<<]+=lazy[a];
lazy[a<<|]+=lazy[a];
lazy[a]=;
}
void modify(int a,ll l,ll r,ll l1,ll r1,ll v){
if(r<l1||r1<l)return;
if(l1<=l&&r<=r1){
lazy[a]+=v;
tr[a][]+=(r-l+)*v;
tr[a][]+=sig(l,r)*v;
tr[a][]+=ssig(l,r)*v;
return;
}
ll mid=(l+r)>>;
push(a,l,r,mid);
modify(a<<,l,mid,l1,r1,v);modify(a<<|,mid+,r,l1,r1,v);
tr[a][]=tr[a<<][]+tr[a<<|][];
tr[a][]=tr[a<<][]+tr[a<<|][];
tr[a][]=tr[a<<][]+tr[a<<|][];
}
ll query(int a,ll l,ll r,ll l1,ll r1){
if(r<l1||r1<l)return ;
if(l1<=l&&r<=r1){
return (+r1-l1-l1*r1)*tr[a][]+(l1+r1)*tr[a][]-tr[a][];
}
ll mid=(l+r)>>;
push(a,l,r,mid);
return query(a<<,l,mid,l1,r1)+query(a<<|,mid+,r,l1,r1);
}
ll gcd(ll a,ll b){
return (!b)?a:gcd(b,a%b);
}
int main(){
int n=read()-,m=read();
for(int i=;i<=m;i++){
char ch=getc();
int l=read(),r=read()-;
if(ch=='C')modify(,,n,l,r,read());
else{
ll a=query(,,n,l,r),b=sig(,r-l+);
ll g=gcd(a,b);
printf("%lld/%lld\n",a/g,b/g);
}
}
return ;
}

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

+本文作者: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. 关于BLOB/TEXT字段存储设计及性能的简单研究

    简单研究了一下BLOB/TEXT字段对数据库性能的影响,得到一个大概的结论:(未验证) 无论MySQL还是MSSQL,都可以通过把BLOB/TEXT数据存储在行外的方式提高性能 把BLOB/TEXT字 ...

  2. WeTest功能优化第3期:业内首创,有声音的云真机

    第3期功能优化目录 [云真机远程调试]音频同步传输实现测试有声 [兼容性测试报告]新增视频助力动态定位问题 [云真机远程调试]菜单栏优化助力机型选择 本期介绍的新功能,秉承创造用户需求的理念,在云真机 ...

  3. hdu1159Common Subsequence(动态规划)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  4. 第四篇 与Flask相关的插件(flask-session、wtforms)

    公司中使用SQL的种方式: 1. 写Django:ORM(关系对象映射), 2. 写Flask和其他:有两种方式: (1) 原生SQL:使用原生SQL有两种选择: A. pymysql (python ...

  5. Linux命令应用大词典-第25章 备份与还原

    25.1 mkisofs:创建ISO9660/Joliet/hfs文件系统

  6. Java进阶知识点:不要只会写synchronized - JDK十大并发编程组件总结

    一.背景 提到Java中的并发编程,首先想到的便是使用synchronized代码块,保证代码块在并发环境下有序执行,从而避免冲突.如果涉及多线程间通信,可以再在synchronized代码块中使用w ...

  7. LeetCode 240——搜索二维矩阵 II

    1. 题目 2. 解答 2.1. 方法一 从矩阵的左下角开始比较 目标值等于当前元素,返回 true: 目标值大于当前元素,j 增 1,向右查找,排除掉此列上边的数据(都比当前元素更小): 目标值小于 ...

  8. visionpro9.0破解

    visionpro9.0软件下载 提供一个visionpro9.0视频教程学习网站:点击下面链接进入. ------------------------Halcon,Visionpro高清视频教程,点 ...

  9. solidity中的memory和 storage详解

    Solidity是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上.这里我会讲解一下关键字storage和memory的区别. storage的结构是在合约部署创建时,根据你的合约中状 ...

  10. Asp.net之数组应用

    string[] abc=new string[8]{"1","2","3","4","1",&qu ...