列式子:
如果把从i号收费站到i+1号收费站之间路段编号设为i。
假如查询l号收费站到r号收费站之间的期望值。
$ Ans_{l,r} = \sum\limits_{i=l}^{r-1} v_i \times (r-i) \times (i-l+1) $
       $ = \sum\limits_{i=l}^{r-1} v_i \times (r \times i - r \times l + r - i^2 + i \times l - i) $
       $ = \sum\limits_{i=l}^{r-1} v_i \times ( - i^2 + (r + l -1) \times i + r - r \times l) $
 我们在线段树里维护$ \sum (i^2 \times v_i) $、$ \sum (i \times v_i) $、$ \sum v_i $
有公式:$ \sum\limits_{i=1}^{n} i^2 = \frac{n \times (n+1) \times (2 \times n + 1)}{6} $
然后什么东西都好办了。
//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=1e5+10;
int n,m; long long aa,ff;char cc;
long long read() {
aa=0;cc=getchar();ff=1;
while(cc<'0'||cc>'9') {
if(cc=='-') ff=-1;
cc=getchar();
}
while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
return aa*ff;
} long long gcd(long long x,long long y) {
return y==0? x:gcd(y,x%y);
} struct Node{
long long l,r,pf,yc,lc,laz;
}node[4*maxn]; void bld(int pos,long long l,long long r) {
node[pos].l=l;node[pos].r=r;
if(l==r) return;
long long mid=(node[pos].l+node[pos].r)>>1;
bld(pos<<1,l,mid); bld(pos<<1|1,mid+1,r);
} long long f(long long t) {
return t*(t+1)/2*(2*t+1)/3;
} void ud(int pos) {
long long v=node[pos].laz;
long long l=node[pos].l,r=node[pos].r;
if(!v) return ;
node[pos].lc+=(r-l+1)*v;
node[pos].yc+=(l+r)*(r-l+1)/2*v;
node[pos].pf+=(f(r)-f(l-1))*v;
if(node[pos].l!=node[pos].r) {
node[pos<<1].laz+=v;
node[pos<<1|1].laz+=v;
}
node[pos].laz=0;
} void chge(int pos,long long l,long long r,long long v) {
ud(pos);
if(node[pos].l==l&&node[pos].r==r) {
node[pos].laz+=v;
return;
}
node[pos].lc+=(r-l+1)*v;
node[pos].yc+=(l+r)*(r-l+1)/2*v;
node[pos].pf+=(f(r)-f(l-1))*v;
long long mid=(node[pos].l+node[pos].r)>>1;
if(r<=mid) chge(pos<<1,l,r,v);
else if(l>mid) chge(pos<<1|1,l,r,v);
else chge(pos<<1,l,mid,v),chge(pos<<1|1,mid+1,r,v);
} long long q(int pos,long long l,long long r,long long x,long long y) {
ud(pos);
if(node[pos].l==l&&node[pos].r==r)
return node[pos].lc*(y-y*x)+(y+x-1)*node[pos].yc-node[pos].pf; long long mid=(node[pos].l+node[pos].r)>>1;
if(r<=mid) return q(pos<<1,l,r,x,y);
else if(l>mid) return q(pos<<1|1,l,r,x,y);
else return q(pos<<1,l,mid,x,y)+q(pos<<1|1,mid+1,r,x,y);
} int main() {
n=read();m=read();
long long l,r,ans,x,y;char op;
bld(1,1,n-1);
for(int i=1;i<=m;++i) {
do op=getchar();while(op<'C'||op>'Q');
l=read();r=read();
if(op=='C') chge(1,l,r-1,read());
else {
ans=q(1,l,r-1,l,r);
x=r-l+1;
x=x*(x-1)/2;
y=gcd(ans,x);
ans/=y;x/=y;
printf("%lld/%lld\n",ans,x);
}
}
return 0;
}

  

bzoj2752 高速公路的更多相关文章

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

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

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

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

  3. 【BZOJ2752】【线段树】高速公路

    Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站. Y901高速公路是一条由N-1段路以及N个 ...

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

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

  5. BZOJ2752:[HAOI2012]高速公路——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2752 https://www.luogu.org/problemnew/show/P2221#sub ...

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

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

  7. 【bzoj2752】[HAOI2012]高速公路(road) 线段树

    题目描述 Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站.Y901高速公路是一条由N-1段路以及N个收费站组成的东西 ...

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

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

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

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

随机推荐

  1. JDBC1 --- 获取数据库连接的方式一 --- 技术搬运工(尚硅谷)

    需要mysql-connector-java-5.1.7-bin.jar @Test public void testConnection1() throws SQLException { Drive ...

  2. python 为 class 添加新的属性和方法

    通过继承: >>> class Point(namedtuple('Point', ['x', 'y'])): ... __slots__ = () ... @property .. ...

  3. ubuntn16.04指令

    基础知识: ubuntn中的/表示根目录,包括bin,mnt等文件夹 /home表示家目录,/home/user表示用户下的家目录,/root表示root目录 常用指令: 进入root : sudo ...

  4. TZ_03_mybatis的注解开发

    1.一对多的注解开发 1>需求通过查询所有的用户,并且找到该用户的所有账户(使用延迟加载模式) @Select("select * from user") //sql语句查询 ...

  5. shell总结:读取文件、参数、if、分割字符串、数组长度、空文件、变量赋值、多进程、按行切割文件、查看线程

    Reference: http://saiyaren.iteye.com/blog/1943207 1.     Shell  读取文件和写文件 for line in $(<top30000. ...

  6. Mysql 遇到的一些坑

    1.命令行按回车,或是输入\c,quit 都无法结束编辑状态,如图: 出现了"> ,然后不管输入什么都无法退出,这时输入>前的字符作为结束字符,再输入\c,既需要输入 " ...

  7. Javascript模块化编程(一)模块的写法最佳实践

    Javascript模块化编程,已经成为一个迫切的需求.理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块但是,Javascript不是一种模块化编程语言,它不支持类clas ...

  8. [DEPRECATION] Encountered positional parameter near xxx Positional parameter are considered deprecated; use named parameters or JPA-style positional parameters instead.

    WARN:30 20:55:45,340ms- [HqlSqlWalker]1009行-[DEPRECATION] Encountered positional parameter near line ...

  9. 为啥Spring和Spring MVC包扫描要分开

    开始学习springmvc各种小白问题 根据例子配置了spring扫描包,但是一直提示404错误,经过大量搜索,发现,扫描包的配置应该写在springmvc的配置文件中,而不是springmvc 配置 ...

  10. MySQL错误1055

    问题描述:在MySQL数据库下,执行SQL插入语句报错.错误信息如下: 错误原因:在MySQL5.7之后,sql_mode中默认存在ONLY_FULL_GROUP_BY,SQL语句未通过ONLY_FU ...