【BZOJ】【2752】【HAOI2012】高速公路(Road)
数学期望/线段树
然而又是一道road= =上一道是2750……
下次不要一看期望题就弃疗么……
期望题≠不可做题……!!
其实在这题中,期望就是(所有情况下 权值之和)/(总方案数)
因为是等概率抽取区间啊= =2333
然而分母很好搞,直接就能算出来,所以我们要来搞分子……
分子其实是个这玩意:$$\sum_{i=l}^{r} v[i]*(i-l+1)*(r-i+1)$$
(我不会告诉你一开始我没加“+1”……)
然而我一开始直接用“几何意义”之类的鬼玩意想往上套,果断跪了Orz
膜拜了zyf的题解,其实正确姿势是这样的!$$\begin{aligned} \sum_{i=l}^{r} v[i]*(i-l+1)*(r-i+1) &= \sum_{i=l}^{r} v[i]*[(r-l-l*r+1)+i*(l+r)-i^2] \\ &=\sum_{i=l}^{r} \big (v[i]*(r-l-l*r+1) + v[i]*i*(l+r)-v[i]*i^2 \big ) \end{aligned}$$
然后知道了这个能干嘛?…………其实………… l 和 r 就是询问的 l 和 r ,所以我们只需要维护与 i 相关的项,即$\sum v[i]$、$\sum v[i]*i$和$\sum v[i]*i^2$就可以计算答案啦~(然而蒟蒻没想到……T^T
嗯……怎么维护?合并就是直接加嘛= =反正只跟坐标相关,然后对整个区间都add一个值?……这是数学问题不要问我>_> (其实我也不会
WA:在upd的时候,由于运算时出现了l*r这个不和谐的项……所以传进去的 l 和 r 得是long long
/**************************************************************
Problem: 2752
User: Tunix
Language: C++
Result: Accepted
Time:3712 ms
Memory:16904 kb
****************************************************************/ //BZOJ 2752
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
inline LL getint(){
LL r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=;
/*******************template********************/
int n,m;
struct node{
LL num[],ad;
node(){F(i,,) num[i]=; ad=;}
}t[N<<]; node maintain(node L,node R){
node tmp;
F(i,,) tmp.num[i]=L.num[i]+R.num[i];
return tmp;
}
#define mid (l+r>>1)
#define L (o<<1)
#define R (o<<1|1)
void upd(int o,LL l,LL r,LL v){
t[o].ad+=v;
t[o].num[]+=v*(r-l+);
t[o].num[]+=v*(r+l)*(r-l+)/;
t[o].num[]+=v*(r*(r+)*(*r+)-(l-)*l*(*l-))/;//数学没学好QAQ
}
void Push_down(int o,int l,int r){
if (t[o].ad){
upd(L,l,mid,t[o].ad);
upd(R,mid+,r,t[o].ad);
t[o].ad=;
}
}
void update(int o,int l,int r,int ql,int qr,LL v){
if (ql<=l && qr>=r) upd(o,l,r,v);
else{
Push_down(o,l,r);
if (ql<=mid) update(L,l,mid,ql,qr,v);
if (qr>mid) update(R,mid+,r,ql,qr,v);
t[o]=maintain(t[L],t[R]);
}
}
node query(int o,int l,int r,int ql,int qr){
if (ql<=l && qr>=r) return t[o];
else{
Push_down(o,l,r);
node ans;
if (ql<=mid) ans=maintain(ans,query(L,l,mid,ql,qr));
if (qr>mid) ans=maintain(ans,query(R,mid+,r,ql,qr));
return ans;
}
}
inline LL gcd(LL a,LL b){return b ? gcd(b,a%b) : a;}
void solve(LL fz,LL fm){
fm=fm*(fm+)/;
LL d=gcd(abs(fz),fm);
// cout << fz <<" "<<fm<<' '<<d<<endl;
fz/=d; fm/=d;
printf("%lld/%lld\n",fz,fm);
}
int main(){
#ifndef ONLINE_JUDGE
freopen("2752.in","r",stdin);
freopen("2752.out","w",stdout);
#endif
n=getint()-; m=getint();
char cmd[];
F(i,,m){
scanf("%s",cmd);
LL l=getint(),r=getint()-,v;
if (cmd[]=='C'){
v=getint();
update(,,n,l,r,v);
}else{
node ans=query(,,n,l,r);
LL fz=ans.num[]*(r-l-l*r+)+ans.num[]*(l+r)-ans.num[];
solve(fz,r-l+);
}
}
return ;
}
2752: [HAOI2012]高速公路(road)
Time Limit: 20 Sec Memory Limit: 128 MB
Submit: 807 Solved: 287
[Submit][Status][Discuss]
Description
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将期望花费多少费用呢?
Input
第一行2个正整数N,M,表示有N个收费站,M次调整或询问
接下来M行,每行将出现以下两种形式中的一种
C l r v 表示将第l个收费站到第r个收费站之间的所有道路的通行费全部增加v
Q l r 表示对于给定的l,r,要求回答小A的问题
所有C与Q操作中保证1<=l<r<=N
Output
对于每次询问操作回答一行,输出一个既约分数
若答案为整数a,输出a/1
Sample Input
C 1 4 2
C 1 2 -1
Q 1 2
Q 2 4
Q 1 4
Sample Output
8/3
17/6
HINT
数据规模
所有C操作中的v的绝对值不超过10000
在任何时刻任意道路的费用均为不超过10000的非负整数
所有测试点的详细情况如下表所示
Test N M
1 =10 =10
2 =100 =100
3 =1000 =1000
4 =10000 =10000
5 =50000 =50000
6 =60000 =60000
7 =70000 =70000
8 =80000 =80000
9 =90000 =90000
10 =100000 =100000
Source
【BZOJ】【2752】【HAOI2012】高速公路(Road)的更多相关文章
- 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] ...
- bzoj 2752: [HAOI2012]高速公路(road)
Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站.Y901高速公路是一条由N-1段路以及N个收 ...
- ●BZOJ 2752 [HAOI2012]高速公路(road)
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2752题解: 期望,线段树. 把每个路段看成一个点,那么对于l~R的操作,就可以转化为对l~r ...
- BZOJ 2752 [HAOI2012]高速公路(road):线段树【维护区间内子串和】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2752 题意: 有一个初始全为0的,长度为n的序列a. 有两种操作: (1)C l r v: ...
- 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] ...
- BZOJ 2752:[HAOI2012]高速公路(road)(线段树)
[HAOI2012]高速公路(road) Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站.Y ...
- BZOJ2752: [HAOI2012]高速公路(road)(线段树 期望)
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1820 Solved: 736[Submit][Status][Discuss] Descripti ...
- 【bzoj2752】[HAOI2012]高速公路(road) 线段树
题目描述 Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站.Y901高速公路是一条由N-1段路以及N个收费站组成的东西 ...
随机推荐
- HDU - 4420 2013icpc长春A 函数离散化 + st表
思路:我们定义F(x) 为以x点为起点,向后(a - b)个里面有多少个白球,虽然x的范围是LL范围内的,但是白球的 个数只有1e5, 那么我们可以把连续一段相同的离散化到一起, 对于一个确定的长度为 ...
- hdoj1102 Constructing Roads(Prime || Kruskal)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1102 题意 有n个村庄(编号1~n),给出n个村庄之间的距离,开始时n个村庄之间已经有了q条路,现在需 ...
- Ionic实战九:ionic视频播放
本模板和以前的方式不同,采用的是 iframe方式引入的视频,如下代码:       
- perf工具crash的问题
perf抓取时系统crash的情况.找前同事了解到perf工具导致系统crash的一种情况, perf工具默认是使用cycles,这个硬件事件是使用NMI,可能会导致内核错误. 之前文档上的perf命 ...
- 在centOS使用systemctl配置启动多个tomcat
公司服务器使用的是阿里云CentOS7,CentOS7和CentOS6目前最大区别就是service变成了现在的systemctl,简单的查了一下并结合使用,发现systemctl功能上等同于6上面的 ...
- pip作用
介绍 pip 是一个安装和管理 Python 包的工具,python安装包的工具有easy_install, setuptools, pip,distribute.使用这些工具都能下载并安装djang ...
- BZOJ.3771.Triple(母函数 FFT 容斥)
题目链接 \(Description\) 有\(n\)个物品(斧头),每个物品价值不同且只有一件,问取出一件.两件.三件物品,所有可能得到的价值和及其方案数.\((a,b),(b,a)\)算作一种方案 ...
- bzoj 2850
比较基础的KD树.每个节点维护一个BOX,包含包含当当前子树的点的最小矩形,以及点权和,然后用“整个矩形都在直线的一侧”和“整个矩形都不在直线的一侧”剪枝. /******************** ...
- Shell 学习笔记之传递参数
传递参数 设置权限 chmod +x file.sh 传递参数 ./file.sh parameter1 ... 特殊字符 $# 传递到脚本的参数个数 $* 以一个单字符串的形式显示所有向脚本传递的参 ...
- http协议之 COOKIE
cookie我们都很了解,这里描述下cookie的几个参数意义 key = "qq", value = "Bobser" .. os.time(), path ...