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\) ...
随机推荐
- Qt打开外部程序和文件夹需要注意的细节(注意QProcess的空格问题,以及打开本地文件时,需要QUrl::fromLocalFile才可以)
下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this ...
- 图像滤镜艺术---(Punch Filter)交叉冲印滤镜
原文:图像滤镜艺术---(Punch Filter)交叉冲印滤镜 (Punch Filter)交叉冲印滤镜 本文介绍一种交叉冲印效果的代码实现,至于原理,不在累赘,直接看代码: int f_TPun ...
- ubuntu下建立golang的build脚本
在不在os中设置gopath,goroot的情况下 建立build.sh文件,文件内容如下: export GOARCH="386"export GOBIN="/home ...
- MySQL 其它基本操作
索引 所谓索引,就是类似于书的目录,目的也类似,都是为了提高检索速度.ALTER TABLE <表名> ADD INDEX <索引名(列名)>;或者CREATE INDEX & ...
- Fundamentals Code Library,包含HTTP TCP JSON BigInteger 加密算法 Unicode等许多东西
http://fundementals.sourceforge.net/index.html https://github.com/fundamentalslib/fundamentals5 http ...
- QT5.1编译后的安装目录问题(硬路径问题)
这个是我的编译参数:configure -ltcg -confirm-license -opensource -platform win32-msvc2010 -debug-and-release - ...
- qt---cdb(Microsoft Console Debugger)调试
支持的调试器 windows系统下主要的调试器: CDB ,只能调试用户程序,只有控制台界面,以命令行形式工作 NTSD, 只能调试用户程序,只有控制台界面,以命令行形式工作 KD,主要用于内核调试, ...
- 插件化一(android)
插件化设计概述(android) 一. 模块划分 Basic模块包括:初始化接口.插件加载接口.插件更新接口和埋点接口. a) 初始化接口:完成一些必要的初始化 ...
- 把滚动箱的样式做如下调整来模拟 TPanel
程序中用 TPanel 做了容器, 需要给它一个背景图片; 发现这竟是个难题! 发现我经常使用的滚动箱控件 TScrollBox, 是一个很好的替代品. 本例需要先添加两个图片资源, 添加方法可以参考 ...
- C# 对字段忽略模型校验
1.在if (!ModelState.IsValid)之前给字段赋值,然后TryUpdateModel()2.使用如下方法 public ActionResult Create([Bind(Exclu ...