BZOJ2752:[HAOI2012]高速公路——题解
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]高速公路——题解的更多相关文章
- BZOJ2752: [HAOI2012]高速公路(road)
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 608 Solved: 199[Submit][ ...
- 【线段树】BZOJ2752: [HAOI2012]高速公路(road)
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1621 Solved: 627[Submit] ...
- BZOJ2752: [HAOI2012]高速公路(road)(线段树 期望)
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1820 Solved: 736[Submit][Status][Discuss] Descripti ...
- [BZOJ2752][HAOI2012]高速公路
BZOJ Luogu sol 看上去是道数学期望题但实际上是个傻逼数据结构 首先答案的形式应该就是 \[\frac{\mbox{[l,r]区间内的子区间权值之和}}{\mbox{[l,r]区间内的子区 ...
- 2019.01.14 bzoj2752: [HAOI2012]高速公路(线段树)
传送门 线段树菜题. 题意简述:给一条nnn个点的链,链有边权,支持区间修改边权,查询在一段区间内随机选择不同的起点和终点路径的期望总边权和. 思路:考虑每条边的贡献. 考虑对于一段区间[l,r][l ...
- luogu P2221 [HAOI2012]高速公路题解
题面 很套路的拆式子然后线段树上维护区间和的题.一般都是把式子拆成区间内几个形如\(\sum i*a_i, \sum i^2 * a_i\)的式子相加减的形式. 考虑一次询问[l,r]的答案怎么算: ...
- [bzoj2752]高速公路 题解(线段树)
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2102 Solved: 887[Submit] ...
- BZOJ 2752: [HAOI2012]高速公路(road)( 线段树 )
对于询问[L, R], 我们直接考虑每个p(L≤p≤R)的贡献,可以得到 然后化简一下得到 这样就可以很方便地用线段树, 维护一个p, p*vp, p*(p+1)*vp就可以了 ----------- ...
- BZOJ 2752: [HAOI2012]高速公路(road) [线段树 期望]
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1219 Solved: 446[Submit] ...
随机推荐
- 数据库c3p0配置文件
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-con ...
- C# Builder
如下: class Program { static void Main(string[] args) { ).BuildB(2.1).BuildUp(); Console.Read(); } } p ...
- CentOS 7.2安装11g Grid Infrastructure
Preface Oracle claimed that 11g RAC is supported on Redhat Linux 7 and above version,but the ...
- WEB安全--高级sql注入,爆错注入,布尔盲注,时间盲注
1.爆错注入 什么情况想能使用报错注入------------页面返回连接错误信息 常用函数 updatexml()if...floorextractvalue updatexml(,concat() ...
- StreamReader和StreamWriter中文乱码问题
StreamReader和StreamWriter中文乱码问题 1.写入: string FilePath = @"E:\Measure.csv"; StreamWriter w ...
- Automatic Judge
Description Welcome to HDU to take part in the second CCPC girls’ competition! A new automatic judge ...
- 学霸系统UI项目功能说明书 v1.0版本
发布人员:软件工程实践小队. 发布内容:学霸系统UI项目说明书. 版本:学霸v1.0版本. 学霸系统UI项目说明书 v1.0版本分为以下部分: Part 1:用户须知: Part 2:功能实现: Pa ...
- c# dll问题
问题描述: dll完全拷贝另一个程序,可是报缺少引用程序集之类的错误. 解决办法: 有可能是.net版本造成的错误.一般常见在3.5升到4之后,存在很多容差.
- Spring Boot(二)配置分析
回顾一下采用SSM开发项目时,项目中会存在多个配置文件,比如web.xml,配置Spring相关的applicationContext-springmvc.xml, applicationContex ...
- 访问需要HTTP Basic Authentication认证的资源的各种开发语言的实现
什么是HTTP Basic Authentication?直接看http://en.wikipedia.org/wiki/Basic_authentication_scheme吧. 在你访问一个需要H ...