bzoj 2752 9.20考试第三题 高速公路(road)题解
2752: [HAOI2012]高速公路(road)
Time Limit: 20 Sec Memory Limit: 128 MB
Submit: 1545 Solved: 593
[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
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cmath>
#include<map>
#include<vector>
#define N 100004
#define int long long
using namespace std;
int n,m;
struct no
{
int left,right,mid;
long long lazy;
long long data[];
long long sum[];
}node[N*];
long long gcd(long long a,long long b)
{
if(b==)return a;
return gcd(b,a%b);
}
void pushup(int x)
{
for(int i=;i<=;i++)
{
node[x].data[i]=node[x*].data[i]+node[*x+].data[i];
node[x].sum[i]=node[x*].sum[i]+node[*x+].sum[i];
}
}
void build(int left,int right,int x)
{
node[x].left=left,node[x].right=right;
if(left==right)
{
node[x].data[]=left+;
node[x].data[]=left;
node[x].data[]=;
node[x].data[]=left*(left+);
return;
}
int mid=(left+right)>>;
node[x].mid=mid;
build(left,mid,*x);
build(mid+,right,*x+);
pushup(x);
}
struct inf
{
long long a,b;
};
char b[];
void pushdown(int x)
{
if(node[x].lazy)
{
node[*x].lazy+=node[x].lazy;
node[x*+].lazy+=node[x].lazy;
for(int i=;i<=;i++)
{
node[*x].sum[i]+=node[x].lazy*node[*x].data[i];
node[*x+].sum[i]+=node[x].lazy*node[*x+].data[i];
}
node[x].lazy=;
}
}
void add(int left,int right,int x,int z)
{
if(node[x].left==left&&node[x].right==right)
{
node[x].lazy+=z;
for(int i=;i<=;i++)
node[x].sum[i]+=node[x].data[i]*z;
return;
}
pushdown(x);
int mid=node[x].mid;
if(left>mid)
add(left,right,x*+,z);
else if(right<=mid)
add(left,right,*x,z);
else
add(left,mid,x*,z),add(mid+,right,*x+,z);
pushup(x);
}
inf get(long long left,long long right,int x,long long l,long long r)
{
if(node[x].left==left&&node[x].right==right)
{
inf aa;
aa.a=node[x].sum[]*r-l*r*node[x].sum[];
aa.a-=node[x].sum[];
aa.a+=l*node[x].sum[];
aa.b=(r-l+)*(r-l)/;
long long t=gcd(aa.a,aa.b);
aa.a/=t;
aa.b/=t;
return aa;
}
pushdown(x);
int mid=node[x].mid;
if(left>mid)
return get(left,right,*x+,l,r);
else if(right<=mid)
return get(left,right,*x,l,r);
else
{
inf aa=get(left,mid,*x,l,r);
inf bb=get(mid+,right,*x+,l,r);
if(aa.b==bb.b)
{
aa.a+=bb.a;
long long t=gcd(aa.a,aa.b);
if(t!=)
aa.a/=t,aa.b/=t;
return aa;
}
else
{
long long tt=gcd(aa.b,bb.b);
long long c;
if(aa.b%tt==)
{
c=aa.b/tt;
c*=bb.b;
}
else if(bb.b%tt==)
{
c=bb.b/tt;
c*aa.b;
}
else
{
c=aa.b*bb.b/tt;
}
aa.a*=c/aa.b;
bb.a*=c/bb.b;
aa.a+=bb.a;
aa.b=c;
long long t=gcd(aa.a,aa.b);
if(t!=)
aa.a/=t,aa.b/=t;
return aa;
}
}
}
signed main()
{
scanf("%lld%lld",&n,&m);
build(,n-,);
while(m--)
{
scanf("%s",b);
if(b[]=='C')
{
int l,r,z;
scanf("%lld%lld%lld",&l,&r,&z);
add(l,r-,,z);
}
else
{
long long l,r;
scanf("%lld%lld",&l,&r);
inf tt=get(l,r-,,l,r);
printf("%lld/%lld\n",tt.a,tt.b);
}
}
return ;
}
bzoj 2752 9.20考试第三题 高速公路(road)题解的更多相关文章
- 9.5 考试 第三题 奇袭题解(codeforce 526f)
问题 C: 奇袭 时间限制: 1 Sec 内存限制: 256 MB 题目描述 由于各种原因,桐人现在被困在Under World(以下简称UW)中,而UW马上 要迎来最终的压力测试——魔界入侵. 唯 ...
- 9.18考试 第三题chess题解
在讲这道题之前我们先明确一个丝薄出题人根本没有半点提示却坑死了无数人的注意点: 走敌人和不走敌人直接到时两种走法,但只走一个敌人和走一大坨敌人到同一个点只算一种方案(当然,前提是步骤一致). 当时看完 ...
- 【BZOJ】【2752】【HAOI2012】高速公路(Road)
数学期望/线段树 然而又是一道road= =上一道是2750…… 下次不要一看期望题就弃疗么…… 期望题≠不可做题……!! 其实在这题中,期望就是(所有情况下 权值之和)/(总方案数) 因为是等概率抽 ...
- JXJJOI2018_三题
这次比赛的话其实还挺满意的,虽然T1 20pts(指的是分数,考试时知道有坑但是考完都没找到的我就知道切不掉这题qwq),T3爆零是在意料之外,不过其实T2贪心能切掉也是意料之外的,所以作此判断.当然 ...
- C语言考试解答十题
学院比较奇葩,大一下期让学的VB,这学期就要学C++了,然后在开学的前三个周没有课,就由老师讲三个周的C语言,每天9:30~11:30听课,除去放假和双休日,实际听课时间一共是12天*2小时,下午是1 ...
- NOIP2005-普及组复赛-第三题-采药
题目描述 Description 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山 ...
- 看雪.TSRC 2017CTF秋季赛第三题
看雪.TSRC 2017CTF秋季赛第三题 wp 这是一道很简单的题,反调试的坑略多.这道题采用了很多常用的反调试手段,比如调用IsDebuggerPresent.进程名检查等等.另外也有利用SEH的 ...
- 【LOJ6067】【2017 山东一轮集训 Day3】第三题 FFT
[LOJ6067][2017 山东一轮集训 Day3]第三题 FFT 题目大意 给你 \(n,b,c,d,e,a_0,a_1,\ldots,a_{n-1}\),定义 \[ \begin{align} ...
- test20181016 B君的第三题
题意 B 君的第三题(haskell) 题目描述 大学四年,我为什么,为什么不好好读书,没找到和你一样的工作. B 君某天看到了这样一个题,勾起了无穷的回忆. 输入\(n, k\) 和一棵\(n\) ...
随机推荐
- VS.NET版本与VC版本对应关系
VC++编译器版本 IDE版本 VC6 VC6.0 VC7 VS2003 VC8 VS2005 VC9 VS2008 VC10 VS2010 VC11 VS2012 VC12 VS2013 VC14 ...
- Resources.resx 未将对象引用设置到对象的实例
原文:解决使用DevExpress开发错误:未将对象引用设置到对象的实例 在使用DevExpress是总是会出现一些状况.这次同事在他的机器上调试完毕的代码发过来,却出现“未将对象引用设置到对象的实例 ...
- ADB命令笔记本
ADB即Android Debug Bridge,作为电脑操作手机的工具,被Android开发者和众多国内xxx安全管家所使用.在此记录一些常见的命令,随时更新,方便以后查找.(万一以后我也要开发一款 ...
- Portal for ArcGIS 资源承载数据类型
在Portal中数据主要分为两大类:Web内容与桌面内容.对于Web内容与桌面内容中的每个项目(item)又被具体分为maps,layers, styles, tools,applications,和 ...
- Android Studio 添加 Genymotion插件
原文:Android Studio 添加 Genymotion插件 1.下载Genymotion:官网地址,必须先注册才能下载,下载带有VirtualBox的版本 2.安装:安装时会连VirtualB ...
- matplotlib简介
python的matplotlib包可以帮助我们绘制丰富的图表,有助于我们的数据分析. matplotlib官方文档:matplotlib 本博客所有代码默认导入matplotlib.pyplot和n ...
- FMX中实现PostMessage的方法
首先,做为一个从Windows下转过来的开发人员,许多时候,我们喜欢用PostMessage来触发一些异步执行的代码,但遗憾的是,FMX做为EMB的跨平台库的基础,只提供了SendMessage方法, ...
- delphi 读写文本文件(函数比较全)
需要两个按钮和两个Richedit控件,采用默认名称即可. procedure TForm1.Button1Click(Sender: TObject); //写文件 var wText: Text ...
- qt获取网络ip地址的类
最近在学习qt网络编程,基于tcp和udp协议. 看了一些别人的程序和qt4自带的例子,困扰我最大的问题就是获取ip的类,总结起来还挺多的. 主要介绍常用的QtNetwork Module中的QHos ...
- springboot 集成完整的swagger2
springboot 在集成swagger中会不会遇到各种问题: 1.swagger 进行接口鉴权(比如设置header的token,接口进行拦截处理). 2.swagger 进行实体属性解析(po ...